debugpy/tests/helpers/threading.py
Eric Snow 0d7e0d2656
Wait-on-exit before sending "disconnect" response. (#475)
(fixes gh-459)

We must wait-for-user before the "disconnect" response is sent. This PR fixes that.
2018-06-14 15:50:50 -06:00

43 lines
1.1 KiB
Python

from __future__ import absolute_import
import sys
import threading
import time
import warnings
from ptvsd._util import TimeoutError
if sys.version_info < (3,):
def acquire_with_timeout(lock, timeout):
if lock.acquire(False):
return True
for _ in range(int(timeout * 10)):
time.sleep(0.1)
if lock.acquire(False):
return True
else:
return False
else:
def acquire_with_timeout(lock, timeout):
return lock.acquire(timeout=timeout)
def get_locked_and_waiter(timeout=1.0):
_timeout = timeout
lock = threading.Lock()
lock.acquire()
def wait(timeout=_timeout, reason=None, fail=False):
if timeout is None:
timeout = _timeout
if acquire_with_timeout(lock, timeout):
lock.release()
else:
msg = 'timed out (after {} seconds) waiting'.format(timeout)
if reason:
msg += ' for {}'.format(reason)
if fail:
raise TimeoutError(msg)
warnings.warn(msg, stacklevel=2)
return lock, wait