From 3f0f25f73c5612cd9fc2a69e44183b7f06c7b6f5 Mon Sep 17 00:00:00 2001 From: Marc Horowitz Date: Wed, 5 Dec 2018 16:57:22 -0800 Subject: [PATCH] Back out "Check for thread consistency in JSCRuntime" Summary: This check is too aggressive. We will consider putting it back once we are more certain nothing will trigger it. Differential Revision: D13350907 fbshipit-source-id: 6033bdbfe7adb2a18bdf889c090cf271497605e5 --- ReactCommon/cxxreact/Instance.cpp | 2 -- ReactCommon/jsi/JSCRuntime.cpp | 40 +++++++------------------------ 2 files changed, 9 insertions(+), 33 deletions(-) diff --git a/ReactCommon/cxxreact/Instance.cpp b/ReactCommon/cxxreact/Instance.cpp index aa434764c..a49f1d60d 100644 --- a/ReactCommon/cxxreact/Instance.cpp +++ b/ReactCommon/cxxreact/Instance.cpp @@ -53,8 +53,6 @@ void Instance::initializeBridge( m_syncCV.notify_all(); }); - // If the NativeToJsBridge ctor throws an exception, this check will - // likely happen before before the redbox can be rendered. CHECK(nativeToJsBridge_); } diff --git a/ReactCommon/jsi/JSCRuntime.cpp b/ReactCommon/jsi/JSCRuntime.cpp index 53e0a29f3..3e9543653 100644 --- a/ReactCommon/jsi/JSCRuntime.cpp +++ b/ReactCommon/jsi/JSCRuntime.cpp @@ -28,14 +28,6 @@ struct Lock { void unlock(const jsc::JSCRuntime&) const {} }; -#if __has_builtin(__builtin_expect) -#define JSC_LIKELY(EXPR) __builtin_expect((bool)(EXPR), true) -#define JSC_UNLIKELY(EXPR) __builtin_expect((bool)(EXPR), false) -#else -#define JSC_LIKELY(EXPR) (EXPR) -#define JSC_UNLIKELY(EXPR) (EXPR) -#endif - class JSCRuntime : public jsi::Runtime { public: // Creates new context in new context group @@ -199,32 +191,23 @@ class JSCRuntime : public jsi::Runtime { void checkException(JSValueRef exc, const char* msg); void checkException(JSValueRef res, JSValueRef exc, const char* msg); - void checkThreadId() { -#ifndef NDEBUG - if (JSC_UNLIKELY(tid_ != std::this_thread::get_id())) { - // In the version of JSC on iOS 11, creating a JSContext on one - // thread and using it on another can trigger subtle and nearly - // impossible to debug reentrancy-related crashes in the VM (see - // https://bugs.webkit.org/show_bug.cgi?id=186827). In !NDEBUG - // builds, check for this case and throw an exception, so it can - // be detected early. This could be called anywhere, but for - // now, it's called only in a few less frequently used places to - // avoid unnecessary checks. - throw std::logic_error("Detected JSC thread hazard"); - } -#endif - } - JSGlobalContextRef ctx_; std::atomic ctxInvalid_; std::string desc_; #ifndef NDEBUG mutable std::atomic objectCounter_; mutable std::atomic stringCounter_; - std::thread::id tid_; #endif }; +#if __has_builtin(__builtin_expect) +#define JSC_LIKELY(EXPR) __builtin_expect((bool)(EXPR), true) +#define JSC_UNLIKELY(EXPR) __builtin_expect((bool)(EXPR), false) +#else +#define JSC_LIKELY(EXPR) (EXPR) +#define JSC_UNLIKELY(EXPR) (EXPR) +#endif + #define JSC_ASSERT(x) \ do { \ if (JSC_UNLIKELY(!!(x))) { \ @@ -309,8 +292,7 @@ JSCRuntime::JSCRuntime(JSGlobalContextRef ctx) #ifndef NDEBUG , objectCounter_(0), - stringCounter_(0), - tid_(std::this_thread::get_id()) + stringCounter_(0) #endif { } @@ -335,8 +317,6 @@ JSCRuntime::~JSCRuntime() { void JSCRuntime::evaluateJavaScript( std::unique_ptr buffer, const std::string& sourceURL) { - checkThreadId(); - std::string tmp( reinterpret_cast(buffer->data()), buffer->size()); JSStringRef sourceRef = JSStringCreateWithUTF8CString(tmp.c_str()); @@ -355,8 +335,6 @@ void JSCRuntime::evaluateJavaScript( } jsi::Object JSCRuntime::global() { - checkThreadId(); - return createObject(JSContextGetGlobalObject(ctx_)); }