There is an asymetry is how the Networking process suspension is managed. We drop the assertion (& suspend the process) whenever the WebProcess says it is ready to suspend, but we only take the assertion (& resume execution) when the WebContent process is actually resumed. This leaves a race – where the WebContent process was willing to be suspended, but the UI app cahnged its mind suspending it. Since the WebContent process never actually suspended (we only prepared it to), we never send a resume, and since we never resume, we never wake the Networking process.
Created attachment 253574 [details] Fix
Comment on attachment 253574 [details] Fix View in context: https://bugs.webkit.org/attachment.cgi?id=253574&action=review r=me > Source/WebKit2/ChangeLog:9 > + There is an asymetry is how the Networking process suspension is managed. asymmetry is -> asymmetry in > Source/WebKit2/ChangeLog:13 > + the WebContent process was willing to be suspended, but the UI app cahnged cahnged -> changed > Source/WebKit2/UIProcess/WebProcessProxy.cpp:918 > +void WebProcessProxy::didSetAssertionState(AssertionState state) I feel like some build will break because "state" is unused unless PLATFORM(IOS) && ENABLE(NETWORK_PROCESS).
Committed revision 184774.
<rdar://problem/21033029>