Skip to content

Commit 4eac42f

Browse files
committed
Rm _busy_wait()
1 parent 2d3c3f7 commit 4eac42f

1 file changed

Lines changed: 23 additions & 25 deletions

File tree

Lib/subprocess.py

Lines changed: 23 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2112,29 +2112,6 @@ def _wait_kqueue(self, timeout):
21122112
finally:
21132113
kq.close()
21142114

2115-
def _busy_wait(self, timeout):
2116-
endtime = _time() + timeout
2117-
# Enter a busy loop if we have a timeout. This busy loop was
2118-
# cribbed from Lib/threading.py in Thread.wait() at r71065.
2119-
delay = 0.0005 # 500 us -> initial delay of 1 ms
2120-
while True:
2121-
if self._waitpid_lock.acquire(False):
2122-
try:
2123-
if self.returncode is not None:
2124-
break # Another thread waited.
2125-
(pid, sts) = self._try_wait(os.WNOHANG)
2126-
assert pid == self.pid or pid == 0
2127-
if pid == self.pid:
2128-
self._handle_exitstatus(sts)
2129-
break
2130-
finally:
2131-
self._waitpid_lock.release()
2132-
remaining = self._remaining_time(endtime)
2133-
if remaining <= 0:
2134-
raise TimeoutExpired(self.args, timeout)
2135-
delay = min(delay * 2, remaining, .05)
2136-
time.sleep(delay)
2137-
21382115
def _wait(self, timeout):
21392116
"""Internal implementation of wait() on POSIX.
21402117
@@ -2155,8 +2132,29 @@ def _wait(self, timeout):
21552132
if pid == self.pid:
21562133
self._handle_exitstatus(sts)
21572134
return self.returncode
2158-
else:
2159-
self._busy_wait(timeout)
2135+
return None
2136+
2137+
# Enter a busy loop if we have a timeout. This busy loop was
2138+
# cribbed from Lib/threading.py in Thread.wait() at r71065.
2139+
endtime = _time() + timeout
2140+
delay = 0.0005 # 500 us -> initial delay of 1 ms
2141+
while True:
2142+
if self._waitpid_lock.acquire(False):
2143+
try:
2144+
if self.returncode is not None:
2145+
break # Another thread waited.
2146+
(pid, sts) = self._try_wait(os.WNOHANG)
2147+
assert pid == self.pid or pid == 0
2148+
if pid == self.pid:
2149+
self._handle_exitstatus(sts)
2150+
break
2151+
finally:
2152+
self._waitpid_lock.release()
2153+
remaining = self._remaining_time(endtime)
2154+
if remaining <= 0:
2155+
raise TimeoutExpired(self.args, timeout)
2156+
delay = min(delay * 2, remaining, .05)
2157+
time.sleep(delay)
21602158
else:
21612159
while self.returncode is None:
21622160
with self._waitpid_lock:

0 commit comments

Comments
 (0)