gh-131233: remove return-in-finally in multiprocessing/connection.py (#131416)

This commit is contained in:
Irit Katriel 2025-03-21 18:05:47 +00:00 committed by GitHub
parent 4cc82ffa37
commit 3e2cceaa87
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -322,22 +322,32 @@ if _winapi:
try:
ov, err = _winapi.ReadFile(self._handle, bsize,
overlapped=True)
sentinel = object()
return_value = sentinel
try:
if err == _winapi.ERROR_IO_PENDING:
waitres = _winapi.WaitForMultipleObjects(
[ov.event], False, INFINITE)
assert waitres == WAIT_OBJECT_0
try:
if err == _winapi.ERROR_IO_PENDING:
waitres = _winapi.WaitForMultipleObjects(
[ov.event], False, INFINITE)
assert waitres == WAIT_OBJECT_0
except:
ov.cancel()
raise
finally:
nread, err = ov.GetOverlappedResult(True)
if err == 0:
f = io.BytesIO()
f.write(ov.getbuffer())
return_value = f
elif err == _winapi.ERROR_MORE_DATA:
return_value = self._get_more_data(ov, maxsize)
except:
ov.cancel()
raise
finally:
nread, err = ov.GetOverlappedResult(True)
if err == 0:
f = io.BytesIO()
f.write(ov.getbuffer())
return f
elif err == _winapi.ERROR_MORE_DATA:
return self._get_more_data(ov, maxsize)
if return_value is sentinel:
raise
if return_value is not sentinel:
return return_value
except OSError as e:
if e.winerror == _winapi.ERROR_BROKEN_PIPE:
raise EOFError