]> git.saurik.com Git - apple/javascriptcore.git/blobdiff - wtf/gtk/ThreadingGtk.cpp
JavaScriptCore-903.tar.gz
[apple/javascriptcore.git] / wtf / gtk / ThreadingGtk.cpp
index a6ec8f75cbd7e7f907832a673584b9553d12ff88..863ee81d7ca3c3028d5e85de410366d52de45b89 100644 (file)
 #include "HashMap.h"
 #include "MainThread.h"
 #include "RandomNumberSeed.h"
+#include <wtf/StdLibExtras.h>
 
 #include <glib.h>
 #include <limits.h>
 
 namespace WTF {
 
-static Mutex* atomicallyInitializedStaticMutex;
+typedef HashMap<ThreadIdentifier, GThread*> ThreadMap;
 
-static ThreadIdentifier mainThreadIdentifier;
+static Mutex* atomicallyInitializedStaticMutex;
 
 static Mutex& threadMapMutex()
 {
-    static Mutex mutex;
+    DEFINE_STATIC_LOCAL(Mutex, mutex, ());
     return mutex;
 }
 
@@ -62,8 +63,6 @@ void initializeThreading()
         atomicallyInitializedStaticMutex = new Mutex;
         threadMapMutex();
         initializeRandomNumberGenerator();
-        mainThreadIdentifier = currentThread();
-        initializeMainThread();
     }
 }
 
@@ -78,9 +77,9 @@ void unlockAtomicallyInitializedStaticMutex()
     atomicallyInitializedStaticMutex->unlock();
 }
 
-static HashMap<ThreadIdentifier, GThread*>& threadMap()
+static ThreadMap& threadMap()
 {
-    static HashMap<ThreadIdentifier, GThread*> map;
+    DEFINE_STATIC_LOCAL(ThreadMap, map, ());
     return map;
 }
 
@@ -88,7 +87,7 @@ static ThreadIdentifier identifierByGthreadHandle(GThread*& thread)
 {
     MutexLocker locker(threadMapMutex());
 
-    HashMap<ThreadIdentifier, GThread*>::iterator i = threadMap().begin();
+    ThreadMap::iterator i = threadMap().begin();
     for (; i != threadMap().end(); ++i) {
         if (i->second == thread)
             return i->first;
@@ -168,9 +167,9 @@ ThreadIdentifier currentThread()
     return establishIdentifierForThread(currentThread);
 }
 
-bool isMainThread()
+void yield()
 {
-    return currentThread() == mainThreadIdentifier;
+    g_thread_yield();
 }
 
 Mutex::Mutex()