Title: [244571] trunk/Tools
Revision
244571
Author
[email protected]
Date
2019-04-23 16:52:43 -0700 (Tue, 23 Apr 2019)

Log Message

webkitpy: Kill unresponsive worker processes
https://bugs.webkit.org/show_bug.cgi?id=197205
<rdar://problem/50104388>

Reviewed by Lucas Forschler.

* Scripts/webkitpy/common/message_pool.py:
(_MessagePool.__init__): Add close timeout.
(_MessagePool._close): Send termination before joining workers, kill unresponsive workers.

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (244570 => 244571)


--- trunk/Tools/ChangeLog	2019-04-23 23:46:46 UTC (rev 244570)
+++ trunk/Tools/ChangeLog	2019-04-23 23:52:43 UTC (rev 244571)
@@ -1,3 +1,15 @@
+2019-04-23  Jonathan Bedard  <[email protected]>
+
+        webkitpy: Kill unresponsive worker processes
+        https://bugs.webkit.org/show_bug.cgi?id=197205
+        <rdar://problem/50104388>
+
+        Reviewed by Lucas Forschler.
+
+        * Scripts/webkitpy/common/message_pool.py:
+        (_MessagePool.__init__): Add close timeout.
+        (_MessagePool._close): Send termination before joining workers, kill unresponsive workers.
+
 2019-04-23  Alex Christensen  <[email protected]>
 
         Add unit tests for WKWebView.serverTrust

Modified: trunk/Tools/Scripts/webkitpy/common/message_pool.py (244570 => 244571)


--- trunk/Tools/Scripts/webkitpy/common/message_pool.py	2019-04-23 23:46:46 UTC (rev 244570)
+++ trunk/Tools/Scripts/webkitpy/common/message_pool.py	2019-04-23 23:52:43 UTC (rev 244571)
@@ -43,7 +43,9 @@
 import cPickle
 import logging
 import multiprocessing
+import os
 import Queue
+import signal
 import sys
 import time
 import traceback
@@ -62,7 +64,7 @@
 
 
 class _MessagePool(object):
-    def __init__(self, caller, worker_factory, num_workers, worker_startup_delay_secs=0.0, host=None):
+    def __init__(self, caller, worker_factory, num_workers, worker_startup_delay_secs=0.0, host=None, timeout=30):
         self._caller = caller
         self._worker_factory = worker_factory
         self._num_workers = num_workers
@@ -72,6 +74,7 @@
         self._host = host
         self._name = 'manager'
         self._running_inline = (self._num_workers == 1)
+        self._timeout = timeout
         if self._running_inline:
             self._messages_to_worker = Queue.Queue()
             self._messages_to_manager = Queue.Queue()
@@ -137,7 +140,15 @@
         for worker in self._workers:
             if worker.is_alive():
                 worker.terminate()
-                worker.join()
+
+        deadline = time.time() + self._timeout
+        for worker in self._workers:
+            if worker.is_alive():
+                worker.join(timeout=max(deadline - time.time(), 0))
+            if worker.is_alive():
+                _log.error('{} failed to terminate, killing it'.format(worker.name))
+                os.kill(worker.ident, signal.SIGKILL)
+
         self._workers = []
         if not self._running_inline:
             # FIXME: This is a hack to get multiprocessing to not log tracebacks during shutdown :(.
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to