Ignore:
Timestamp:
Sep 3, 2008, 9:37:00 AM (17 years ago)
Author:
[email protected]
Message:

Reviewed by Darin Adler.

Implement callOnMainThreadAndWait().

This will be useful when a background thread needs to perform UI calls synchronously
(e.g. an openDatabase() call cannot return until the user answers to a confirmation dialog).

  • wtf/MainThread.cpp: (WTF::FunctionWithContext::FunctionWithContext): Added a ThreadCondition member. When non-zero, the condition is signalled after the function is called. (WTF::mainThreadFunctionQueueMutex): Renamed from functionQueueMutex, sinc this is no longer static. Changed to be initialized from initializeThreading() to avoid lock contention. (WTF::initializeMainThread): On non-Windows platforms, just call mainThreadFunctionQueueMutex. (WTF::dispatchFunctionsFromMainThread): Signal synchronous calls when done. (WTF::callOnMainThread): Updated for functionQueueMutex rename. (WTF::callOnMainThreadAndWait): Added.
  • wtf/MainThread.h: Added callOnMainThreadAndWait(); initializeMainThread() now exists on all platforms.
  • wtf/win/MainThreadWin.cpp: (WTF::initializeMainThread): Added a callOnMainThreadAndWait() call to initialize function queue mutex.
  • wtf/ThreadingGtk.cpp: (WTF::initializeThreading):
  • wtf/ThreadingPthreads.cpp: (WTF::initializeThreading):
  • wtf/ThreadingQt.cpp: (WTF::initializeThreading): Only initialize mainThreadIdentifier on non-Darwin platforms. It was not guaranteed to be accurate on Darwin.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/wtf/ThreadingQt.cpp

    r35598 r36056  
    3030#include "Threading.h"
    3131
    32 #include <wtf/HashMap.h>
    33 #include <wtf/MathExtras.h>
     32#include "HashMap.h"
     33#include "MainThread.h"
     34#include "MathExtras.h"
    3435
    3536#include <QMutex>
     
    6566Mutex* atomicallyInitializedStaticMutex;
    6667
     68#if !PLATFORM(DARWIN)
    6769static ThreadIdentifier mainThreadIdentifier;
     70#endif
    6871
    6972static Mutex& threadMapMutex()
     
    125128        threadMapMutex();
    126129        wtf_random_init();
     130#if !PLATFORM(DARWIN)
    127131        mainThreadIdentifier = currentThread();
     132#endif
     133        initializeMainThread();
    128134    }
    129135}
Note: See TracChangeset for help on using the changeset viewer.