Title: [243528] trunk/Source/WebKit
Revision
243528
Author
cdu...@apple.com
Date
2019-03-26 16:54:11 -0700 (Tue, 26 Mar 2019)

Log Message

[macOS] The network process is not exiting reliably when the WebProcessPool is destroyed
https://bugs.webkit.org/show_bug.cgi?id=196277
<rdar://problem/49127581>

Reviewed by Alex Christensen.

When, an AuxiliaryProcess receives the AuxiliaryProcess::Terminate IPC, it calls stopRunLoop()
to exit. WebProcess overrides AuxiliaryProcess::stopRunLoop() to call exit(0) on the main
thread. Other auxiliary processes such as the NetworkProcess would end up calling
platformStopRunLoop(). On iOS and iOSMac, platformStopRunLoop() calls XPCServiceExit(), which
makes sense since auxiliary processes run their run loop by calling xpc_main(). However, on
macOS, platformStopRunLoop() was calling RunLoop::main().stop() to exit instead, which was
unreliable as demonstrated by the test app attached to the radar.

Updating platformStopRunLoop() to call XPCServiceExit() on macOS fixes the problem and I now
see the NetworkProcess exiting reliably there. This is the approach I have chosen in this
patch since it appears to be reliable and it makes the code consistent on all Cocoa platforms.

* Shared/AuxiliaryProcess.cpp:
* Shared/Cocoa/AuxiliaryProcessCocoa.mm:
(WebKit::AuxiliaryProcess::platformStopRunLoop):
* Shared/ios/AuxiliaryProcessIOS.mm:
(WebKit::AuxiliaryProcess::platformStopRunLoop): Deleted.
* Shared/mac/AuxiliaryProcessMac.mm:
(WebKit::AuxiliaryProcess::platformStopRunLoop): Deleted.

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (243527 => 243528)


--- trunk/Source/WebKit/ChangeLog	2019-03-26 23:51:10 UTC (rev 243527)
+++ trunk/Source/WebKit/ChangeLog	2019-03-26 23:54:11 UTC (rev 243528)
@@ -1,3 +1,31 @@
+2019-03-26  Chris Dumez  <cdu...@apple.com>
+
+        [macOS] The network process is not exiting reliably when the WebProcessPool is destroyed
+        https://bugs.webkit.org/show_bug.cgi?id=196277
+        <rdar://problem/49127581>
+
+        Reviewed by Alex Christensen.
+
+        When, an AuxiliaryProcess receives the AuxiliaryProcess::Terminate IPC, it calls stopRunLoop()
+        to exit. WebProcess overrides AuxiliaryProcess::stopRunLoop() to call exit(0) on the main
+        thread. Other auxiliary processes such as the NetworkProcess would end up calling
+        platformStopRunLoop(). On iOS and iOSMac, platformStopRunLoop() calls XPCServiceExit(), which
+        makes sense since auxiliary processes run their run loop by calling xpc_main(). However, on
+        macOS, platformStopRunLoop() was calling RunLoop::main().stop() to exit instead, which was
+        unreliable as demonstrated by the test app attached to the radar.
+
+        Updating platformStopRunLoop() to call XPCServiceExit() on macOS fixes the problem and I now
+        see the NetworkProcess exiting reliably there. This is the approach I have chosen in this
+        patch since it appears to be reliable and it makes the code consistent on all Cocoa platforms.
+
+        * Shared/AuxiliaryProcess.cpp:
+        * Shared/Cocoa/AuxiliaryProcessCocoa.mm:
+        (WebKit::AuxiliaryProcess::platformStopRunLoop):
+        * Shared/ios/AuxiliaryProcessIOS.mm:
+        (WebKit::AuxiliaryProcess::platformStopRunLoop): Deleted.
+        * Shared/mac/AuxiliaryProcessMac.mm:
+        (WebKit::AuxiliaryProcess::platformStopRunLoop): Deleted.
+
 2019-03-26  Keith Rollin  <krol...@apple.com>
 
         Inhibit CFNetwork logging in private sessions

Modified: trunk/Source/WebKit/Shared/AuxiliaryProcess.cpp (243527 => 243528)


--- trunk/Source/WebKit/Shared/AuxiliaryProcess.cpp	2019-03-26 23:51:10 UTC (rev 243527)
+++ trunk/Source/WebKit/Shared/AuxiliaryProcess.cpp	2019-03-26 23:54:11 UTC (rev 243528)
@@ -174,7 +174,7 @@
     platformStopRunLoop();
 }
 
-#if !PLATFORM(IOS_FAMILY)
+#if !PLATFORM(COCOA)
 void AuxiliaryProcess::platformStopRunLoop()
 {
     RunLoop::main().stop();

Modified: trunk/Source/WebKit/Shared/Cocoa/AuxiliaryProcessCocoa.mm (243527 => 243528)


--- trunk/Source/WebKit/Shared/Cocoa/AuxiliaryProcessCocoa.mm	2019-03-26 23:51:10 UTC (rev 243527)
+++ trunk/Source/WebKit/Shared/Cocoa/AuxiliaryProcessCocoa.mm	2019-03-26 23:54:11 UTC (rev 243528)
@@ -27,6 +27,7 @@
 #import "AuxiliaryProcess.h"
 
 #import "WKCrashReporter.h"
+#import "XPCServiceEntryPoint.h"
 #import <wtf/cocoa/Entitlements.h>
 
 namespace WebKit {
@@ -42,4 +43,9 @@
     return WTF::hasEntitlement(m_connection->xpcConnection(), entitlement);
 }
 
+void AuxiliaryProcess::platformStopRunLoop()
+{
+    XPCServiceExit(WTFMove(m_priorityBoostMessage));
 }
+
+}

Modified: trunk/Source/WebKit/Shared/ios/AuxiliaryProcessIOS.mm (243527 => 243528)


--- trunk/Source/WebKit/Shared/ios/AuxiliaryProcessIOS.mm	2019-03-26 23:51:10 UTC (rev 243527)
+++ trunk/Source/WebKit/Shared/ios/AuxiliaryProcessIOS.mm	2019-03-26 23:54:11 UTC (rev 243528)
@@ -113,11 +113,6 @@
 
 }
 
-void AuxiliaryProcess::platformStopRunLoop()
-{
-    XPCServiceExit(WTFMove(m_priorityBoostMessage));
-}
-
 } // namespace WebKit
 
 #endif

Modified: trunk/Source/WebKit/Shared/mac/AuxiliaryProcessMac.mm (243527 => 243528)


--- trunk/Source/WebKit/Shared/mac/AuxiliaryProcessMac.mm	2019-03-26 23:51:10 UTC (rev 243527)
+++ trunk/Source/WebKit/Shared/mac/AuxiliaryProcessMac.mm	2019-03-26 23:54:11 UTC (rev 243528)
@@ -695,13 +695,6 @@
 }
 #endif
 
-#if PLATFORM(IOSMAC)
-void AuxiliaryProcess::platformStopRunLoop()
-{
-    XPCServiceExit(WTFMove(m_priorityBoostMessage));
-}
-#endif
-
 void AuxiliaryProcess::setQOS(int latencyQOS, int throughputQOS)
 {
     if (!latencyQOS && !throughputQOS)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to