summaryrefslogtreecommitdiff
path: root/Source/JavaScriptCore/wtf/MainThread.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/JavaScriptCore/wtf/MainThread.cpp')
-rw-r--r--Source/JavaScriptCore/wtf/MainThread.cpp40
1 files changed, 40 insertions, 0 deletions
diff --git a/Source/JavaScriptCore/wtf/MainThread.cpp b/Source/JavaScriptCore/wtf/MainThread.cpp
index 915126589..f8686aa31 100644
--- a/Source/JavaScriptCore/wtf/MainThread.cpp
+++ b/Source/JavaScriptCore/wtf/MainThread.cpp
@@ -34,6 +34,7 @@
#include "Functional.h"
#include "StdLibExtras.h"
#include "Threading.h"
+#include <wtf/ThreadSpecific.h>
#if PLATFORM(CHROMIUM)
#error Chromium uses a different main thread implementation
@@ -101,6 +102,7 @@ void initializeMainThread()
mainThreadFunctionQueueMutex();
initializeMainThreadPlatform();
+ initializeGCThreads();
}
#else
@@ -249,4 +251,42 @@ bool isMainThread()
}
#endif
+#if ENABLE(PARALLEL_GC)
+static ThreadSpecific<bool>* isGCThread;
+#endif
+
+void initializeGCThreads()
+{
+#if ENABLE(PARALLEL_GC)
+ isGCThread = new ThreadSpecific<bool>();
+#endif
+}
+
+#if ENABLE(PARALLEL_GC)
+void registerGCThread()
+{
+ if (!isGCThread) {
+ // This happens if we're running in a process that doesn't care about
+ // MainThread.
+ return;
+ }
+
+ **isGCThread = true;
+}
+
+bool isMainThreadOrGCThread()
+{
+ if (isGCThread->isSet() && **isGCThread)
+ return true;
+
+ return isMainThread();
+}
+#elif PLATFORM(MAC)
+// This is necessary because JavaScriptCore.exp doesn't support preprocessor macros.
+bool isMainThreadOrGCThread()
+{
+ return isMainThread();
+}
+#endif
+
} // namespace WTF