2009-06-01 Dmitry Titov <dimich@chromium.org>
authordimich@chromium.org <dimich@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 1 Jun 2009 19:44:20 +0000 (19:44 +0000)
committerdimich@chromium.org <dimich@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 1 Jun 2009 19:44:20 +0000 (19:44 +0000)
commit21fdb8a348a1ba8a3678df165c1937cf5c97cbe8
treec96c009297ab239a33ed65ada9a9573740f0655a
parentcb2c9b4d86c7cebe2e405c4b58c9d53d9fc5b152
2009-06-01  Dmitry Titov  <dimich@chromium.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=25973
        Avoid calling CurrentThread() in thread-specific destructors in OSX Chromium.
        Pthreads invoke thread-specific destructors after WTF::detachThread() is called and ThreadIdentifier
        for the thread removed from the WTF thread map. Calling CurrentThread() in such destructor causes
        the ThreadIdentifier to be re-created and inserted into the map again. Since Pthreads on OSX reuse
        the pthread_t between threads, the next created thread will have the same pthread_t and cause an assert
        in establishIdentifierForPthreadHandle() since the id is already in the map.

        The behavior is covered by existing test LayoutTests/fast/workers/worker-terminate.html, which currently fails
        on OSX Chromium and will stop failing after this change.

        * platform/ThreadGlobalData.h:
        * platform/ThreadGlobalData.cpp:
        (WebCore::ThreadGlobalData::~ThreadGlobalData):
        Store the result of "isMainThread()" in a member variable during construction of thread-specific data
        to avoid calling IsMainThread() in destructor, since the latter calls CurrentThread() in OSX Chromium.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@44327 268f45cc-cd09-0410-ab3c-d52691b4dbfc
WebCore/ChangeLog
WebCore/platform/ThreadGlobalData.cpp
WebCore/platform/ThreadGlobalData.h