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/ThreadingGtk.cpp

    r35726 r36056  
    3131#include "Threading.h"
    3232
    33 #include <wtf/HashMap.h>
    34 #include <wtf/MathExtras.h>
     33#include "HashMap.h"
     34#include "MainThread.h"
     35#include "MathExtras.h"
    3536
    3637#include <glib.h>
     
    4041Mutex* atomicallyInitializedStaticMutex;
    4142
     43#if !PLATFORM(DARWIN)
    4244static ThreadIdentifier mainThreadIdentifier;
     45#endif
    4346
    4447static Mutex& threadMapMutex()
     
    5861        threadMapMutex();
    5962        wtf_random_init();
     63#if !PLATFORM(DARWIN)
    6064        mainThreadIdentifier = currentThread();
     65#endif
     66        initializeMainThread();
    6167    }
    6268}
Note: See TracChangeset for help on using the changeset viewer.