From 3ab059b8a8d2978754238e8fe7003b54f81e91c3 Mon Sep 17 00:00:00 2001 From: chakrabot Date: Tue, 8 Aug 2017 03:01:49 -0700 Subject: [PATCH] [Merge Microsoft/Chakracore@895f892129] [MERGE #3489 @obastemur] Convert internal static initializer (thread safe) to global Merge pull request #3489 from obastemur:fix_br_tls MSVC uses TLS for internal thread safe static initializers. Use static class constructor. Fixes build break with Full. --- .../core/lib/Runtime/Library/JSON.cpp | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/deps/chakrashim/core/lib/Runtime/Library/JSON.cpp b/deps/chakrashim/core/lib/Runtime/Library/JSON.cpp index 0e08d5807ea..1e903f99b80 100644 --- a/deps/chakrashim/core/lib/Runtime/Library/JSON.cpp +++ b/deps/chakrashim/core/lib/Runtime/Library/JSON.cpp @@ -332,18 +332,17 @@ namespace JSON // -------- StringifySession implementation ------------// - static char16 gapStringBuffer[JSONspaceSize]; - static char16* GetGapStringInternal() + class JSONSpace { - wmemset(gapStringBuffer, _u(' '), JSONspaceSize); - return gapStringBuffer; - } + public: + static char16 Buffer[JSONspaceSize]; + JSONSpace() { wmemset(Buffer, _u(' '), JSONspaceSize); } + }; + char16 JSONSpace::Buffer[JSONspaceSize]; + static JSONSpace jsonSpace; void StringifySession::CompleteInit(Js::Var space, ArenaAllocator* tempAlloc) { - //set the stack, gap - static const char16* spaceBuffer = GetGapStringInternal(); // multi threading safe - charcount_t len = 0; switch (Js::JavascriptOperators::GetTypeId(space)) { @@ -352,7 +351,7 @@ namespace JSON len = max(0, min(JSONspaceSize, static_cast(Js::TaggedInt::ToInt32(space)))); if (len) { - gap = Js::JavascriptString::NewCopyBuffer(spaceBuffer, len, scriptContext); + gap = Js::JavascriptString::NewCopyBuffer(jsonSpace.Buffer, len, scriptContext); } break; } @@ -364,7 +363,7 @@ namespace JSON len = max(0, static_cast(min(static_cast(JSONspaceSize), Js::JavascriptConversion::ToInteger(space, scriptContext)))); if (len) { - gap = Js::JavascriptString::NewCopyBuffer(spaceBuffer, len, scriptContext); + gap = Js::JavascriptString::NewCopyBuffer(jsonSpace.Buffer, len, scriptContext); } break; }