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