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