@@ -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