[SCM] WebKit Debian packaging branch, webkit-1.2, updated. upstream/1.1.90-6072-g9a69373

eric at webkit.org eric at webkit.org
Thu Apr 8 01:59:06 UTC 2010


The following commit has been merged in the webkit-1.2 branch:
commit 95c6e9da6aed4721513f0155ee846f27d4092c6a
Author: eric at webkit.org <eric at webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Thu Feb 25 14:49:12 2010 +0000

    2010-02-25  Jochen Eisinger  <jochen at chromium.org>
    
            Reviewed by Jeremy Orlow.
    
            Make the context that was passed to the ThreadFunction accessible.
            https://bugs.webkit.org/show_bug.cgi?id=35379
    
            * wtf/Threading.h:
            * wtf/ThreadingNone.cpp:
            (WTF::threadContext):
            * wtf/ThreadingPthreads.cpp:
            (WTF::):
            (WTF::identifierByPthreadHandle):
            (WTF::establishIdentifierForPthreadHandle):
            (WTF::pthreadHandleForIdentifier):
            (WTF::contextForIdentifier):
            (WTF::createThreadInternal):
            (WTF::currentThread):
            (WTF::threadContext):
            * wtf/ThreadingWin.cpp:
            (WTF::):
            (WTF::threadMap):
            (WTF::storeThreadHandleByIdentifier):
            (WTF::threadHandleForIdentifier):
            (WTF::contextForIdentifier):
            (WTF::createThreadInternal):
            (WTF::threadContext):
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@55234 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/JavaScriptCore/ChangeLog b/JavaScriptCore/ChangeLog
index 4a136db..f049f3e 100644
--- a/JavaScriptCore/ChangeLog
+++ b/JavaScriptCore/ChangeLog
@@ -1,3 +1,31 @@
+2010-02-25  Jochen Eisinger  <jochen at chromium.org>
+
+        Reviewed by Jeremy Orlow.
+
+        Make the context that was passed to the ThreadFunction accessible.
+        https://bugs.webkit.org/show_bug.cgi?id=35379
+
+        * wtf/Threading.h:
+        * wtf/ThreadingNone.cpp:
+        (WTF::threadContext):
+        * wtf/ThreadingPthreads.cpp:
+        (WTF::):
+        (WTF::identifierByPthreadHandle):
+        (WTF::establishIdentifierForPthreadHandle):
+        (WTF::pthreadHandleForIdentifier):
+        (WTF::contextForIdentifier):
+        (WTF::createThreadInternal):
+        (WTF::currentThread):
+        (WTF::threadContext):
+        * wtf/ThreadingWin.cpp:
+        (WTF::):
+        (WTF::threadMap):
+        (WTF::storeThreadHandleByIdentifier):
+        (WTF::threadHandleForIdentifier):
+        (WTF::contextForIdentifier):
+        (WTF::createThreadInternal):
+        (WTF::threadContext):
+
 2010-02-24  Oliver Hunt  <oliver at apple.com>
 
         Reviewed by Geoffrey Garen.
diff --git a/JavaScriptCore/wtf/Threading.h b/JavaScriptCore/wtf/Threading.h
index b7a2f08..b522915 100644
--- a/JavaScriptCore/wtf/Threading.h
+++ b/JavaScriptCore/wtf/Threading.h
@@ -127,6 +127,7 @@ ThreadIdentifier currentThread();
 bool isMainThread();
 int waitForThreadCompletion(ThreadIdentifier, void**);
 void detachThread(ThreadIdentifier);
+void* threadContext(ThreadIdentifier);
 
 #if USE(PTHREADS)
 typedef pthread_mutex_t PlatformMutex;
diff --git a/JavaScriptCore/wtf/ThreadingNone.cpp b/JavaScriptCore/wtf/ThreadingNone.cpp
index 2e8a259..cfc9d31 100644
--- a/JavaScriptCore/wtf/ThreadingNone.cpp
+++ b/JavaScriptCore/wtf/ThreadingNone.cpp
@@ -41,6 +41,7 @@ int waitForThreadCompletion(ThreadIdentifier, void**) { return 0; }
 void detachThread(ThreadIdentifier) { }
 ThreadIdentifier currentThread() { return ThreadIdentifier(); }
 bool isMainThread() { return true; }
+void* threadContext(ThreadIdentifier) { return 0; }
 
 Mutex::Mutex() { }
 Mutex::~Mutex() { }
diff --git a/JavaScriptCore/wtf/ThreadingPthreads.cpp b/JavaScriptCore/wtf/ThreadingPthreads.cpp
index 2feb808..e841f62 100644
--- a/JavaScriptCore/wtf/ThreadingPthreads.cpp
+++ b/JavaScriptCore/wtf/ThreadingPthreads.cpp
@@ -53,7 +53,12 @@
 
 namespace WTF {
 
-typedef HashMap<ThreadIdentifier, pthread_t> ThreadMap;
+typedef struct {
+    pthread_t handle;
+    void* context;
+} ThreadInfo;
+
+typedef HashMap<ThreadIdentifier, ThreadInfo> ThreadMap;
 
 static Mutex* atomicallyInitializedStaticMutex;
 
@@ -105,14 +110,14 @@ static ThreadIdentifier identifierByPthreadHandle(const pthread_t& pthreadHandle
 
     ThreadMap::iterator i = threadMap().begin();
     for (; i != threadMap().end(); ++i) {
-        if (pthread_equal(i->second, pthreadHandle))
+        if (pthread_equal(i->second.handle, pthreadHandle))
             return i->first;
     }
 
     return 0;
 }
 
-static ThreadIdentifier establishIdentifierForPthreadHandle(const pthread_t& pthreadHandle)
+static ThreadIdentifier establishIdentifierForPthreadHandle(const pthread_t& pthreadHandle, void* context)
 {
     ASSERT(!identifierByPthreadHandle(pthreadHandle));
 
@@ -120,7 +125,10 @@ static ThreadIdentifier establishIdentifierForPthreadHandle(const pthread_t& pth
 
     static ThreadIdentifier identifierCount = 1;
 
-    threadMap().add(identifierCount, pthreadHandle);
+    ThreadInfo info;
+    info.handle = pthreadHandle;
+    info.context = context;
+    threadMap().add(identifierCount, info);
 
     return identifierCount++;
 }
@@ -129,9 +137,17 @@ static pthread_t pthreadHandleForIdentifier(ThreadIdentifier id)
 {
     MutexLocker locker(threadMapMutex());
 
-    return threadMap().get(id);
+    return threadMap().get(id).handle;
+}
+
+static void* contextForIdentifier(ThreadIdentifier id)
+{
+    MutexLocker locker(threadMapMutex());
+
+    return threadMap().get(id).context;
 }
 
+
 void clearPthreadHandleForIdentifier(ThreadIdentifier id)
 {
     MutexLocker locker(threadMapMutex());
@@ -174,7 +190,7 @@ ThreadIdentifier createThreadInternal(ThreadFunction entryPoint, void* data, con
         delete threadData;
         return 0;
     }
-    return establishIdentifierForPthreadHandle(threadHandle);
+    return establishIdentifierForPthreadHandle(threadHandle, data);
 }
 #else
 ThreadIdentifier createThreadInternal(ThreadFunction entryPoint, void* data, const char*)
@@ -185,7 +201,7 @@ ThreadIdentifier createThreadInternal(ThreadFunction entryPoint, void* data, con
         return 0;
     }
 
-    return establishIdentifierForPthreadHandle(threadHandle);
+    return establishIdentifierForPthreadHandle(threadHandle, data);
 }
 #endif
 
@@ -235,7 +251,7 @@ ThreadIdentifier currentThread()
         return id;
 
     // Not a WTF-created thread, ThreadIdentifier is not established yet.
-    id = establishIdentifierForPthreadHandle(pthread_self());
+    id = establishIdentifierForPthreadHandle(pthread_self(), 0);
     ThreadIdentifierData::initialize(id);
     return id;
 }
@@ -249,6 +265,11 @@ bool isMainThread()
 #endif
 }
 
+void* threadContext(ThreadIdentifier id)
+{
+    return contextForIdentifier(id); 
+}
+
 Mutex::Mutex()
 {
     pthread_mutex_init(&m_mutex, NULL);
diff --git a/JavaScriptCore/wtf/ThreadingWin.cpp b/JavaScriptCore/wtf/ThreadingWin.cpp
index 73c3f0c..75da7b4 100644
--- a/JavaScriptCore/wtf/ThreadingWin.cpp
+++ b/JavaScriptCore/wtf/ThreadingWin.cpp
@@ -118,6 +118,11 @@ typedef struct tagTHREADNAME_INFO {
 } THREADNAME_INFO;
 #pragma pack(pop)
 
+typedef struct {
+    HANDLE handle;
+    void* context;
+} ThreadInfo;
+
 void initializeCurrentThreadInternal(const char* szThreadName)
 {
     THREADNAME_INFO info;
@@ -165,23 +170,32 @@ void initializeThreading()
     }
 }
 
-static HashMap<DWORD, HANDLE>& threadMap()
+static HashMap<DWORD, ThreadInfo>& threadMap()
 {
-    static HashMap<DWORD, HANDLE> map;
+    static HashMap<DWORD, ThreadInfo> map;
     return map;
 }
 
-static void storeThreadHandleByIdentifier(DWORD threadID, HANDLE threadHandle)
+static void storeThreadHandleByIdentifier(DWORD threadID, HANDLE threadHandle, void* context)
 {
     MutexLocker locker(threadMapMutex());
     ASSERT(!threadMap().contains(threadID));
-    threadMap().add(threadID, threadHandle);
+    ThreadInfo info;
+    info.handle = threadHandle;
+    info.context = context;
+    threadMap().add(threadID, info);
 }
 
 static HANDLE threadHandleForIdentifier(ThreadIdentifier id)
 {
     MutexLocker locker(threadMapMutex());
-    return threadMap().get(id);
+    return threadMap().get(id).handle;
+}
+
+static void* contextForIdentifier(ThreadIdentifier id)
+{
+    MutexLocker locker(threadMapMutex());
+    return threadMap().get(id).context;
 }
 
 static void clearThreadHandleForIdentifier(ThreadIdentifier id)
@@ -237,7 +251,7 @@ ThreadIdentifier createThreadInternal(ThreadFunction entryPoint, void* data, con
     }
 
     threadID = static_cast<ThreadIdentifier>(threadIdentifier);
-    storeThreadHandleByIdentifier(threadIdentifier, threadHandle);
+    storeThreadHandleByIdentifier(threadIdentifier, threadHandle, data);
 
     return threadID;
 }
@@ -280,6 +294,11 @@ bool isMainThread()
     return currentThread() == mainThreadIdentifier;
 }
 
+void* threadContext(ThreadIdentifier threadID)
+{
+    return contextForIdentifier(threadID);
+}
+
 Mutex::Mutex()
 {
     m_mutex.m_recursionCount = 0;

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list