Skip to content

Commit f91dba1

Browse files
committed
[1.2>master] [MERGE chakra-core#1026] MSFT: 7562980 field of JavascriptLibrary can be reclaimed too early
Merge pull request chakra-core#1026 from Yongqu:bugfix1 At this time, the life time of JavascriptLibrary/ScriptContext etc. is controlled by JsrtContext only. However, there are multiple allocation points during JsrtContext initialization path. JavascriptLibrary could be reclaimed half way during initialization as nothing pins it. Change the globalObject pin/unpin sequence. We'll still pin the GO thus JavascriptLibrary during initialization, but unpin it right after initialization.
2 parents 82643cb + e0fd311 commit f91dba1

2 files changed

Lines changed: 2 additions & 4 deletions

File tree

lib/Jsrt/Core/JsrtContextCore.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ Js::ScriptContext* JsrtContextCore::EnsureScriptContext()
7171

7272
Js::JavascriptLibrary *library = this->GetScriptContext()->GetLibrary();
7373
Assert(library != nullptr);
74+
localThreadContext->GetRecycler()->RootRelease(library->GetGlobalObject());
7475

7576
library->GetEvalFunctionObject()->SetEntryPoint(&Js::GlobalObject::EntryEval);
7677
library->GetFunctionConstructor()->SetEntryPoint(&Js::JavascriptFunction::NewInstance);

lib/Runtime/Base/ScriptContext.cpp

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1230,10 +1230,7 @@ if (!sourceList)
12301230
void ScriptContext::InitializeGlobalObject()
12311231
{
12321232
GlobalObject * localGlobalObject = GlobalObject::New(this);
1233-
if (!GetThreadContext()->IsJSRT())
1234-
{
1235-
GetRecycler()->RootAddRef(localGlobalObject);
1236-
}
1233+
GetRecycler()->RootAddRef(localGlobalObject);
12371234

12381235
// Assigned the global Object after we have successfully AddRef (in case of OOM)
12391236
globalObject = localGlobalObject;

0 commit comments

Comments
 (0)