Title: [295603] trunk/Source/WebCore/workers
Revision
295603
Author
commit-qu...@webkit.org
Date
2022-06-16 12:30:04 -0700 (Thu, 16 Jun 2022)

Log Message

SharedWorkerGlobalScope::close should not directly stop its thread
https://bugs.webkit.org/show_bug.cgi?id=241677
rdar://95010255

Patch by Youenn Fablet <youe...@gmail.com> on 2022-06-16
Reviewed by Alex Christensen.

We were directly stopping the worker thread when calling SharedWorkerGlobalScope::close.
This can trigger the case of stopping the worker thread concurrently from main thread and shared worker thread.
Instead, we reuse the existing Worker infastructure to tell its SharedWorkerThreadProxy to terminate.

* Source/WebCore/workers/WorkerOrWorkletThread.cpp:
(WebCore::WorkerOrWorkletThread::stop):
* Source/WebCore/workers/shared/SharedWorkerGlobalScope.cpp:
(WebCore::SharedWorkerGlobalScope::close): Deleted.
* Source/WebCore/workers/shared/SharedWorkerGlobalScope.h:
* Source/WebCore/workers/shared/context/SharedWorkerThreadProxy.cpp:
(WebCore::SharedWorkerThreadProxy::workerGlobalScopeClosed):
* Source/WebCore/workers/shared/context/SharedWorkerThreadProxy.h:

Canonical link: https://commits.webkit.org/251608@main

Modified Paths

Diff

Modified: trunk/Source/WebCore/workers/WorkerOrWorkletThread.cpp (295602 => 295603)


--- trunk/Source/WebCore/workers/WorkerOrWorkletThread.cpp	2022-06-16 18:49:52 UTC (rev 295602)
+++ trunk/Source/WebCore/workers/WorkerOrWorkletThread.cpp	2022-06-16 19:30:04 UTC (rev 295603)
@@ -239,6 +239,8 @@
 
 void WorkerOrWorkletThread::stop(Function<void()>&& stoppedCallback)
 {
+    ASSERT(isMainThread());
+
     // Mutex protection is necessary to ensure that m_workerGlobalScope isn't changed by
     // WorkerThread::workerThread() while we're accessing it. Note also that stop() can
     // be called before m_workerGlobalScope is fully created.

Modified: trunk/Source/WebCore/workers/shared/SharedWorkerGlobalScope.cpp (295602 => 295603)


--- trunk/Source/WebCore/workers/shared/SharedWorkerGlobalScope.cpp	2022-06-16 18:49:52 UTC (rev 295602)
+++ trunk/Source/WebCore/workers/shared/SharedWorkerGlobalScope.cpp	2022-06-16 19:30:04 UTC (rev 295603)
@@ -55,12 +55,6 @@
     return static_cast<SharedWorkerThread&>(WorkerGlobalScope::thread());
 }
 
-void SharedWorkerGlobalScope::close()
-{
-    SCOPE_RELEASE_LOG("close:");
-    thread().stop(nullptr);
-}
-
 // https://html.spec.whatwg.org/multipage/workers.html#dom-sharedworker step 11.5
 void SharedWorkerGlobalScope::postConnectEvent(TransferredMessagePort&& transferredPort, const String& sourceOrigin)
 {

Modified: trunk/Source/WebCore/workers/shared/SharedWorkerGlobalScope.h (295602 => 295603)


--- trunk/Source/WebCore/workers/shared/SharedWorkerGlobalScope.h	2022-06-16 18:49:52 UTC (rev 295602)
+++ trunk/Source/WebCore/workers/shared/SharedWorkerGlobalScope.h	2022-06-16 19:30:04 UTC (rev 295603)
@@ -44,7 +44,6 @@
     SharedWorkerThread& thread();
 
     void postConnectEvent(TransferredMessagePort&&, const String& sourceOrigin);
-    void close();
 
 private:
     SharedWorkerGlobalScope(const String& name, const WorkerParameters&, Ref<SecurityOrigin>&&, SharedWorkerThread&, Ref<SecurityOrigin>&& topOrigin, IDBClient::IDBConnectionProxy*, SocketProvider*);

Modified: trunk/Source/WebCore/workers/shared/context/SharedWorkerThreadProxy.cpp (295602 => 295603)


--- trunk/Source/WebCore/workers/shared/context/SharedWorkerThreadProxy.cpp	2022-06-16 18:49:52 UTC (rev 295602)
+++ trunk/Source/WebCore/workers/shared/context/SharedWorkerThreadProxy.cpp	2022-06-16 19:30:04 UTC (rev 295603)
@@ -192,4 +192,11 @@
         proxy->notifyNetworkStateChange(isOnLine);
 }
 
+void SharedWorkerThreadProxy::workerGlobalScopeClosed()
+{
+    callOnMainThread([identifier = thread().identifier()] {
+        SharedWorkerContextManager::singleton().stopSharedWorker(identifier);
+    });
+}
+
 } // namespace WebCore

Modified: trunk/Source/WebCore/workers/shared/context/SharedWorkerThreadProxy.h (295602 => 295603)


--- trunk/Source/WebCore/workers/shared/context/SharedWorkerThreadProxy.h	2022-06-16 18:49:52 UTC (rev 295602)
+++ trunk/Source/WebCore/workers/shared/context/SharedWorkerThreadProxy.h	2022-06-16 19:30:04 UTC (rev 295603)
@@ -66,6 +66,7 @@
     void postExceptionToWorkerObject(const String& errorMessage, int lineNumber, int columnNumber, const String& sourceURL) final;
     void postMessageToWorkerObject(MessageWithMessagePorts&&) final { }
     void workerGlobalScopeDestroyed() final { }
+    void workerGlobalScopeClosed() final;
     void confirmMessageFromWorkerObject(bool) final { }
     void reportPendingActivity(bool) final { }
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to