Changeset 244571 in webkit


Ignore:
Timestamp:
Apr 23, 2019 4:52:43 PM (5 years ago)
Author:
Jonathan Bedard
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.

Location:
trunk/Tools
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Tools/ChangeLog

    r244568 r244571  
     12019-04-23  Jonathan Bedard  <jbedard@apple.com>
     2
     3        webkitpy: Kill unresponsive worker processes
     4        https://bugs.webkit.org/show_bug.cgi?id=197205
     5        <rdar://problem/50104388>
     6
     7        Reviewed by Lucas Forschler.
     8
     9        * Scripts/webkitpy/common/message_pool.py:
     10        (_MessagePool.__init__): Add close timeout.
     11        (_MessagePool._close): Send termination before joining workers, kill unresponsive workers.
     12
    1132019-04-23  Alex Christensen  <achristensen@webkit.org>
    214
  • trunk/Tools/Scripts/webkitpy/common/message_pool.py

    r225733 r244571  
    4444import logging
    4545import multiprocessing
     46import os
    4647import Queue
     48import signal
    4749import sys
    4850import time
     
    6365
    6466class _MessagePool(object):
    65     def __init__(self, caller, worker_factory, num_workers, worker_startup_delay_secs=0.0, host=None):
     67    def __init__(self, caller, worker_factory, num_workers, worker_startup_delay_secs=0.0, host=None, timeout=30):
    6668        self._caller = caller
    6769        self._worker_factory = worker_factory
     
    7375        self._name = 'manager'
    7476        self._running_inline = (self._num_workers == 1)
     77        self._timeout = timeout
    7578        if self._running_inline:
    7679            self._messages_to_worker = Queue.Queue()
     
    138141            if worker.is_alive():
    139142                worker.terminate()
    140                 worker.join()
     143
     144        deadline = time.time() + self._timeout
     145        for worker in self._workers:
     146            if worker.is_alive():
     147                worker.join(timeout=max(deadline - time.time(), 0))
     148            if worker.is_alive():
     149                _log.error('{} failed to terminate, killing it'.format(worker.name))
     150                os.kill(worker.ident, signal.SIGKILL)
     151
    141152        self._workers = []
    142153        if not self._running_inline:
Note: See TracChangeset for help on using the changeset viewer.