Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 42b406d0e2bc3cf1d47684ce0b3aa900c9950f0e
https://github.com/WebKit/WebKit/commit/42b406d0e2bc3cf1d47684ce0b3aa900c9950f0e
Author: Youenn Fablet <[email protected]>
Date: 2023-06-27 (Tue, 27 Jun 2023)
Changed paths:
M Source/WebCore/workers/service/server/SWServer.cpp
M Source/WebCore/workers/service/server/SWServerWorker.cpp
M Source/WebCore/workers/service/server/SWServerWorker.h
Log Message:
-----------
REGRESSION (264242@main):
http/tests/workers/service/postmessage-after-terminating-hung-worker.html is
frequently hitting ASSERTION FAILED: state == ServiceWorkerState::Activating
https://bugs.webkit.org/show_bug.cgi?id=258502
rdar://111299016
Reviewed by Chris Dumez.
We added support for restarting a service worker when firing the activate event.
The assertion failure is due to the following case:
1. The service worker, while installing, is set to terminating
2. The service worker finishes its install and goes to activating. We try
firing the activate event but delay until the worker is terminated.
3. The service worker gets terminated. At that point, the service worker state
is set to NotRunning.
3a. First we execute callbacks, which triggers running the service worker and
firing the activate event synchronously.
3b. Then we check whether the worker is activating, and given it was
terminated, we set it as activated in SWServerWorker::setState.
4. We receive the didFinishActivation message and hit the assert, since the
worker state is already activated.
To prevent this, we add a boolean on SWServerWorker to know whether the
activate event is fired.
When the worker goes in NotRunning state, we first check whether the activate
event was fired.
We then run the termination callbacks.
Then, if the activatee vent was fired before the callbacks, we immediately
activate the worker.
This fixes locally the ASSERT.
* Source/WebCore/workers/service/server/SWServer.cpp:
(WebCore::SWServer::runServiceWorkerAndFireActivateEvent):
* Source/WebCore/workers/service/server/SWServerWorker.cpp:
(WebCore::SWServerWorker::setState):
* Source/WebCore/workers/service/server/SWServerWorker.h:
(WebCore::SWServerWorker::markActivateEventAsFired):
Canonical link: https://commits.webkit.org/265553@main
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes