Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: fb46eb89ed570c6cab4f55ba8d7b7cd432a99e6b
      
https://github.com/WebKit/WebKit/commit/fb46eb89ed570c6cab4f55ba8d7b7cd432a99e6b
  Author: Youenn Fablet <[email protected]>
  Date:   2023-06-13 (Tue, 13 Jun 2023)

  Changed paths:
    M Source/WebCore/workers/service/server/SWServer.cpp
    M Source/WebCore/workers/service/server/SWServerWorker.cpp

  Log Message:
  -----------
  SWServerWorker::didFinishActivation is sometimes called on workers that are 
not in activating state
https://bugs.webkit.org/show_bug.cgi?id=258021
rdar://110529723

Reviewed by Chris Dumez.

After https://commits.webkit.org/264242@main, activating service workers that 
are terminating will not send the order to activate immediately.
They will first be stopped, then the service worker will run, and then the 
order to activate will be sent.
The issue is that, when being stopped, the service worker is automatically 
moved from Activating to Activated.
When we send the order to activate and receive the didFinishActivation message, 
we then hit  the SWServerWorker::didFinishActivation assertion,
as the service worker is already in activated state.

To prevent this, we check whether the service worker is activating just before 
sending the order to activate.
This assertion is sometimes hit in bots so this code path is covered by 
existing tests (though this is very racy).

We update the assert to display the worker state in case this patch does not 
fully fix hitting this assert.

* Source/WebCore/workers/service/server/SWServer.cpp:
(WebCore::SWServer::runServiceWorkerAndFireActivateEvent):
* Source/WebCore/workers/service/server/SWServerWorker.cpp:
(WebCore::SWServerWorker::didFinishInstall):
(WebCore::SWServerWorker::didFinishActivation):

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


_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to