[webkit-changes] [WebKit/WebKit] e22ee9: SuspendableWorkQueue might wait indefinitely

Sihui noreply at github.com
Fri Jun 21 17:32:09 PDT 2024


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: e22ee99e18e2119cb158fcd6323250b7a5eff84d
      https://github.com/WebKit/WebKit/commit/e22ee99e18e2119cb158fcd6323250b7a5eff84d
  Author: Sihui Liu <sihui_liu at apple.com>
  Date:   2024-06-21 (Fri, 21 Jun 2024)

  Changed paths:
    M Source/WTF/wtf/SuspendableWorkQueue.cpp

  Log Message:
  -----------
  SuspendableWorkQueue might wait indefinitely
https://bugs.webkit.org/show_bug.cgi?id=275751
rdar://130203868

Reviewed by Chris Dumez.

Currently SuspendableWorkQueue::resume() only notifies when state is Suspended, so if SuspendableWorkQueue waits on
WillSuspend state, it may not be woken up correctly. An example is when SuspendableWorkQueue is at Suspended state and
the following steps happen:
1. Main thread: SuspendableWorkQueue::resume() => state changed from Suspended to Running, notifying background thread
2. Main thread: SuspendableWorkQueue::suspend() => state changed from Running to WillSuspend
3. Background thread: woken up and checking state; state is WillSuspend so it enters wait again
4. Main thread: SuspendableWorkQueue::resume() => state changed from WillSuspend to Running
Since main thread is not notifying background thread at step 4, the background thread will keep waiting after resume()
is invoked. To fix this, make sure SuspendableWorkQueue only waits on Suspended state.

* Source/WTF/wtf/SuspendableWorkQueue.cpp:
(WTF::SuspendableWorkQueue::suspendIfNeeded):

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



To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications


More information about the webkit-changes mailing list