Skip to content

Commit bba5f6f

Browse files
author
Atul Katti
committed
MSFT:18460517 For modules, move cleanup for parser's guest arena later during SourceTextModuleRecord::CleanupBeforeExecution.
1 parent d28a85a commit bba5f6f

File tree

4 files changed

+1800
-6
lines changed

4 files changed

+1800
-6
lines changed

lib/Runtime/Language/SourceTextModuleRecord.cpp

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,9 @@ namespace Js
170170
{
171171
*exceptionVar = this->errorObject;
172172
}
173+
174+
// Cleanup in case of error.
175+
this->ReleaseParserResources();
173176
return E_FAIL;
174177
}
175178
}
@@ -270,8 +273,11 @@ namespace Js
270273
{
271274
hr = PrepareForModuleDeclarationInitialization();
272275
}
273-
274-
this->ReleaseParserResources();
276+
else
277+
{
278+
// Cleanup in case of error.
279+
this->ReleaseParserResources();
280+
}
275281

276282
return hr;
277283
}
@@ -299,6 +305,8 @@ namespace Js
299305

300306
if (this->errorObject != nullptr)
301307
{
308+
// Cleanup in case of error.
309+
this->ReleaseParserResources();
302310
SourceTextModuleRecord::ResolveOrRejectDynamicImportPromise(false, this->errorObject, scriptContext, this);
303311
}
304312
else
@@ -316,10 +324,11 @@ namespace Js
316324
}
317325
}
318326

319-
this->ReleaseParserResources();
320-
321327
if (FAILED(hr))
322328
{
329+
// Cleanup in case of error.
330+
this->ReleaseParserResources();
331+
323332
// We cannot just use the buffer in the specifier string - need to make a copy here.
324333
const char16* moduleName = this->GetSpecifierSz();
325334
size_t length = wcslen(moduleName);
@@ -333,8 +342,6 @@ namespace Js
333342
}
334343
}
335344

336-
this->ReleaseParserResources();
337-
338345
return this->promise;
339346
}
340347

@@ -386,6 +393,9 @@ namespace Js
386393
this->errorObject = childException;
387394
}
388395

396+
// Cleanup in case of error.
397+
this->ReleaseParserResources();
398+
389399
OUTPUT_TRACE_DEBUGONLY(Js::ModulePhase, _u("\t>NotifyParentAsNeeded (childException)\n"), this->GetSpecifierSz());
390400
NotifyParentsAsNeeded();
391401

@@ -838,6 +848,10 @@ namespace Js
838848
Assert(wasDeclarationInitialized);
839849
// Debugger can reparse the source and generate the byte code again. Don't cleanup the
840850
// helper information for now.
851+
852+
// Parser uses a temporary guest arena to keep regex patterns alive. We need to release this arena only after we have no further use
853+
// for the regex pattern objects.
854+
this->ReleaseParserResources();
841855
}
842856

843857
bool SourceTextModuleRecord::ModuleDeclarationInstantiation()
@@ -882,6 +896,8 @@ namespace Js
882896
if (this->errorObject != nullptr)
883897
{
884898
OUTPUT_TRACE_DEBUGONLY(Js::ModulePhase, _u("\t>NotifyParentsAsNeeded (errorObject)\n"));
899+
// Cleanup in case of error.
900+
this->ReleaseParserResources();
885901
NotifyParentsAsNeeded();
886902
return false;
887903
}
@@ -953,6 +969,9 @@ namespace Js
953969

954970
if (this->errorObject != nullptr)
955971
{
972+
// Cleanup in case of error.
973+
this->ReleaseParserResources();
974+
956975
if (this->promise != nullptr)
957976
{
958977
SourceTextModuleRecord::ResolveOrRejectDynamicImportPromise(false, this->errorObject, this->scriptContext, this);
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
false
2+
false
3+
false
4+
false
5+
false
6+
false
7+
false
8+
false
9+
false
10+
false
11+
false
12+
false
13+
false
14+
false
15+
false
16+
false
17+
false
18+
false
19+
sumOfary = 0-87
20+
subset_of_ary = ,,,-87,,,,,,,
21+
sumOfIntArr0 = 0-1925033017-315065814
22+
subset_of_IntArr0 = -1925033017,-187077332,235,1
23+
sumOfIntArr1 = 24-659781834-874213037-496334474-133
24+
subset_of_IntArr1 = 24,-580185237,1299858398,-874213037,-791589229,930084437,165,558857707,0,-133
25+
sumOfFloatArr0 = 0-789520550-1981302345-2035696251-3
26+
subset_of_FloatArr0 = -789520550,-189589443,3,467983660,-264081059,1073741823,-3
27+
sumOfVarArr0 = 0undefined-65569220-1407173769
28+
subset_of_VarArr0 = ,-65569220,-231809381,9,65537
29+
null
30+
null
31+
false
32+
false
33+
false
34+
false
35+
false
36+
false
37+
false
38+
false
39+
false
40+
false
41+
false
42+
false
43+
false
44+
false
45+
false
46+
false
47+
false
48+
false
49+
sumOfary = 0-87
50+
subset_of_ary = ,,,-87,,,,,,,
51+
sumOfIntArr0 = 0-1925033017-315065814
52+
subset_of_IntArr0 = -1925033017,-187077332,235,1
53+
sumOfIntArr1 = 24-659781834-874213037-496334474-133
54+
subset_of_IntArr1 = 24,-580185237,1299858398,-874213037,-791589229,930084437,165,558857707,0,-133
55+
sumOfFloatArr0 = 0-789520550-1981302345-2035696251-3
56+
subset_of_FloatArr0 = -789520550,-189589443,3,467983660,-264081059,1073741823,-3
57+
sumOfVarArr0 = 0undefined-65569220-1407173769
58+
subset_of_VarArr0 = ,-65569220,-231809381,9,65537
59+
null
60+
null
61+
false
62+
false
63+
false
64+
false
65+
false
66+
false
67+
false
68+
false
69+
false
70+
false
71+
false
72+
false
73+
false
74+
false
75+
false
76+
false
77+
false
78+
false
79+
sumOfary = 0-87
80+
subset_of_ary = ,,,-87,,,,,,,
81+
sumOfIntArr0 = 0-1925033017-315065814
82+
subset_of_IntArr0 = -1925033017,-187077332,235,1
83+
sumOfIntArr1 = 24-659781834-874213037-496334474-133
84+
subset_of_IntArr1 = 24,-580185237,1299858398,-874213037,-791589229,930084437,165,558857707,0,-133
85+
sumOfFloatArr0 = 0-789520550-1981302345-2035696251-3
86+
subset_of_FloatArr0 = -789520550,-189589443,3,467983660,-264081059,1073741823,-3
87+
sumOfVarArr0 = 0undefined-65569220-1407173769
88+
subset_of_VarArr0 = ,-65569220,-231809381,9,65537
89+
null
90+
null
91+
false
92+
false
93+
false
94+
false
95+
false
96+
false
97+
false
98+
false
99+
false
100+
false
101+
false
102+
false
103+
false
104+
false
105+
false
106+
false
107+
false
108+
false
109+
sumOfary = 0-87
110+
subset_of_ary = ,,,-87,,,,,,,
111+
sumOfIntArr0 = 0-1925033017-315065814
112+
subset_of_IntArr0 = -1925033017,-187077332,235,1
113+
sumOfIntArr1 = 24-659781834-874213037-496334474-133
114+
subset_of_IntArr1 = 24,-580185237,1299858398,-874213037,-791589229,930084437,165,558857707,0,-133
115+
sumOfFloatArr0 = 0-789520550-1981302345-2035696251-3
116+
subset_of_FloatArr0 = -789520550,-189589443,3,467983660,-264081059,1073741823,-3
117+
sumOfVarArr0 = 0undefined-65569220-1407173769
118+
subset_of_VarArr0 = ,-65569220,-231809381,9,65537
119+
null
120+
null
121+
sumOfary = 0-178-87
122+
subset_of_ary = -178,,,,,,,,,-87,
123+
sumOfIntArr0 = 0-1925033017-315065814
124+
subset_of_IntArr0 = -1925033017,-187077332,235,1
125+
sumOfIntArr1 = 24-659781834-874213037-496334474-133
126+
subset_of_IntArr1 = 24,-580185237,1299858398,-874213037,-791589229,930084437,165,558857707,0,-133
127+
sumOfFloatArr0 = 0-789520550-1981302345-2035696251-3
128+
subset_of_FloatArr0 = -789520550,-189589443,3,467983660,-264081059,1073741823,-3
129+
sumOfVarArr0 = 0undefined-65569220-1407173769
130+
subset_of_VarArr0 = ,-65569220,-231809381,9,65537
131+
null
132+
null

0 commit comments

Comments
 (0)