Make sure implementation of InitializeWebKit2() always run on the main thread
authorcdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 19 May 2017 18:44:14 +0000 (18:44 +0000)
committercdumez@apple.com <cdumez@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 19 May 2017 18:44:14 +0000 (18:44 +0000)
commitb9a84a35c594480f2b84390368393a70def133f9
tree81e25d7c4168564ffa054c6b701461305a1fdc21
parent00bdd1badb7ad5b442cfb08caa1f443f34e6fcff
Make sure implementation of InitializeWebKit2() always run on the main thread
https://bugs.webkit.org/show_bug.cgi?id=172362
<rdar://problem/32295678>

Reviewed by Geoffrey Garen.

Add logic in InitializeWebKit2() for Cocoa ports to always run the initialization code
is only called once, and on the main thread. If we are called from a non-main thread,
we will dispatch synchronously to the main thread to run the initialization code.

This is needed because WebKit2Initialize() is called from the API::Object constructor.
API::Object is thread-safe RefCounted and those objects are sometimes initialized on
non-main thread. If the first of such objects happened to be initialized on a non-main
thread, then we would run the initialization code for the first time on a non-main
thread. This would lead to hard to debug issues because code such as
RunLoop::initializeMainRunLoop() is only safe to call on the main thread because it
stores a pointer to the current thread's RunLoop in a static variable for later use
(i.e. for RunLoop::main()).

* Shared/Cocoa/WebKit2InitializeCocoa.mm: Copied from Source/WebKit2/Shared/WebKit2Initialize.cpp.
(WebKit::runInitializationCode):
(WebKit::InitializeWebKit2):
* Shared/WebKit2Initialize.cpp:
(WebKit::InitializeWebKit2):
* WebKit2.xcodeproj/project.pbxproj:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@217137 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Source/WebKit2/ChangeLog
Source/WebKit2/Shared/Cocoa/WebKit2InitializeCocoa.mm [new file with mode: 0644]
Source/WebKit2/Shared/WebKit2Initialize.cpp
Source/WebKit2/WebKit2.xcodeproj/project.pbxproj