Pārlūkot izejas kodu

[1.10>master] [MERGE #5567 @atulkatti] MSFT:18460517 For modules, move cleanup for parser's guest arena later during SourceTextModuleRecord::CleanupBeforeExecution.

Merge pull request #5567 from atulkatti:Bug18460517.MoveModuleParserCleanup.1
Atul Katti 7 gadi atpakaļ
vecāks
revīzija
0377a2499c

+ 25 - 6
lib/Runtime/Language/SourceTextModuleRecord.cpp

@@ -170,6 +170,9 @@ namespace Js
                     {
                         *exceptionVar = this->errorObject;
                     }
+
+                    // Cleanup in case of error.
+                    this->ReleaseParserResources();
                     return E_FAIL;
                 }
             }
@@ -270,8 +273,11 @@ namespace Js
         {
             hr = PrepareForModuleDeclarationInitialization();
         }
-
-        this->ReleaseParserResources();
+        else
+        {
+            // Cleanup in case of error.
+            this->ReleaseParserResources();
+        }
 
         return hr;
     }
@@ -299,6 +305,8 @@ namespace Js
 
                 if (this->errorObject != nullptr)
                 {
+                    // Cleanup in case of error.
+                    this->ReleaseParserResources();
                     SourceTextModuleRecord::ResolveOrRejectDynamicImportPromise(false, this->errorObject, scriptContext, this);
                 }
                 else
@@ -316,10 +324,11 @@ namespace Js
                 }
             }
 
-            this->ReleaseParserResources();
-
             if (FAILED(hr))
             {
+                // Cleanup in case of error.
+                this->ReleaseParserResources();
+
                 // We cannot just use the buffer in the specifier string - need to make a copy here.
                 const char16* moduleName = this->GetSpecifierSz();
                 size_t length = wcslen(moduleName);
@@ -333,8 +342,6 @@ namespace Js
             }
         }
 
-        this->ReleaseParserResources();
-
         return this->promise;
     }
 
@@ -386,6 +393,9 @@ namespace Js
                 this->errorObject = childException;
             }
 
+            // Cleanup in case of error.
+            this->ReleaseParserResources();
+
             OUTPUT_TRACE_DEBUGONLY(Js::ModulePhase, _u("\t>NotifyParentAsNeeded (childException)\n"), this->GetSpecifierSz());
             NotifyParentsAsNeeded();
 
@@ -838,6 +848,10 @@ namespace Js
         Assert(wasDeclarationInitialized);
         // Debugger can reparse the source and generate the byte code again. Don't cleanup the
         // helper information for now.
+
+        // Parser uses a temporary guest arena to keep regex patterns alive. We need to release this arena only after we have no further use
+        // for the regex pattern objects.
+        this->ReleaseParserResources();
     }
 
     bool SourceTextModuleRecord::ModuleDeclarationInstantiation()
@@ -882,6 +896,8 @@ namespace Js
         if (this->errorObject != nullptr)
         {
             OUTPUT_TRACE_DEBUGONLY(Js::ModulePhase, _u("\t>NotifyParentsAsNeeded (errorObject)\n"));
+            // Cleanup in case of error.
+            this->ReleaseParserResources();
             NotifyParentsAsNeeded();
             return false;
         }
@@ -953,6 +969,9 @@ namespace Js
 
         if (this->errorObject != nullptr)
         {
+            // Cleanup in case of error.
+            this->ReleaseParserResources();
+
             if (this->promise != nullptr)
             {
                 SourceTextModuleRecord::ResolveOrRejectDynamicImportPromise(false, this->errorObject, this->scriptContext, this);

+ 132 - 0
test/es6module/bug_OS18460517.baseline

@@ -0,0 +1,132 @@
+false
+false
+false
+false
+false
+false
+false
+false
+false
+false
+false
+false
+false
+false
+false
+false
+false
+false
+sumOfary = 0-87
+subset_of_ary = ,,,-87,,,,,,,
+sumOfIntArr0 = 0-1925033017-315065814
+subset_of_IntArr0 = -1925033017,-187077332,235,1
+sumOfIntArr1 = 24-659781834-874213037-496334474-133
+subset_of_IntArr1 = 24,-580185237,1299858398,-874213037,-791589229,930084437,165,558857707,0,-133
+sumOfFloatArr0 = 0-789520550-1981302345-2035696251-3
+subset_of_FloatArr0 = -789520550,-189589443,3,467983660,-264081059,1073741823,-3
+sumOfVarArr0 = 0undefined-65569220-1407173769
+subset_of_VarArr0 = ,-65569220,-231809381,9,65537
+null
+null
+false
+false
+false
+false
+false
+false
+false
+false
+false
+false
+false
+false
+false
+false
+false
+false
+false
+false
+sumOfary = 0-87
+subset_of_ary = ,,,-87,,,,,,,
+sumOfIntArr0 = 0-1925033017-315065814
+subset_of_IntArr0 = -1925033017,-187077332,235,1
+sumOfIntArr1 = 24-659781834-874213037-496334474-133
+subset_of_IntArr1 = 24,-580185237,1299858398,-874213037,-791589229,930084437,165,558857707,0,-133
+sumOfFloatArr0 = 0-789520550-1981302345-2035696251-3
+subset_of_FloatArr0 = -789520550,-189589443,3,467983660,-264081059,1073741823,-3
+sumOfVarArr0 = 0undefined-65569220-1407173769
+subset_of_VarArr0 = ,-65569220,-231809381,9,65537
+null
+null
+false
+false
+false
+false
+false
+false
+false
+false
+false
+false
+false
+false
+false
+false
+false
+false
+false
+false
+sumOfary = 0-87
+subset_of_ary = ,,,-87,,,,,,,
+sumOfIntArr0 = 0-1925033017-315065814
+subset_of_IntArr0 = -1925033017,-187077332,235,1
+sumOfIntArr1 = 24-659781834-874213037-496334474-133
+subset_of_IntArr1 = 24,-580185237,1299858398,-874213037,-791589229,930084437,165,558857707,0,-133
+sumOfFloatArr0 = 0-789520550-1981302345-2035696251-3
+subset_of_FloatArr0 = -789520550,-189589443,3,467983660,-264081059,1073741823,-3
+sumOfVarArr0 = 0undefined-65569220-1407173769
+subset_of_VarArr0 = ,-65569220,-231809381,9,65537
+null
+null
+false
+false
+false
+false
+false
+false
+false
+false
+false
+false
+false
+false
+false
+false
+false
+false
+false
+false
+sumOfary = 0-87
+subset_of_ary = ,,,-87,,,,,,,
+sumOfIntArr0 = 0-1925033017-315065814
+subset_of_IntArr0 = -1925033017,-187077332,235,1
+sumOfIntArr1 = 24-659781834-874213037-496334474-133
+subset_of_IntArr1 = 24,-580185237,1299858398,-874213037,-791589229,930084437,165,558857707,0,-133
+sumOfFloatArr0 = 0-789520550-1981302345-2035696251-3
+subset_of_FloatArr0 = -789520550,-189589443,3,467983660,-264081059,1073741823,-3
+sumOfVarArr0 = 0undefined-65569220-1407173769
+subset_of_VarArr0 = ,-65569220,-231809381,9,65537
+null
+null
+sumOfary = 0-178-87
+subset_of_ary = -178,,,,,,,,,-87,
+sumOfIntArr0 = 0-1925033017-315065814
+subset_of_IntArr0 = -1925033017,-187077332,235,1
+sumOfIntArr1 = 24-659781834-874213037-496334474-133
+subset_of_IntArr1 = 24,-580185237,1299858398,-874213037,-791589229,930084437,165,558857707,0,-133
+sumOfFloatArr0 = 0-789520550-1981302345-2035696251-3
+subset_of_FloatArr0 = -789520550,-189589443,3,467983660,-264081059,1073741823,-3
+sumOfVarArr0 = 0undefined-65569220-1407173769
+subset_of_VarArr0 = ,-65569220,-231809381,9,65537
+null
+null

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 239 - 0
test/es6module/bug_OS18460517.js


+ 7 - 0
test/es6module/rlexe.xml

@@ -176,4 +176,11 @@
       <tags>exclude_sanitize_address</tags>
     </default>
   </test>
+  <test>
+    <default>
+      <files>bug_OS18460517.js</files>
+      <baseline>bug_OS18460517.baseline</baseline>
+      <compile-flags>-maxinterpretcount:1 -maxsimplejitruncount:2 -force:rejit</compile-flags>
+    </default>
+  </test>
 </regress-exe>

Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels