Commit 3f9e3810 authored by Steve Dower's avatar Steve Dower

Issue #18382: Zero-length messages are consumed by ReadFile on Windows 8 and later

parent bdf525b7
...@@ -844,7 +844,7 @@ if sys.platform == 'win32': ...@@ -844,7 +844,7 @@ if sys.platform == 'win32':
try: try:
ov, err = _winapi.ReadFile(fileno(), 0, True) ov, err = _winapi.ReadFile(fileno(), 0, True)
except OSError as e: except OSError as e:
err = e.winerror ov, err = None, e.winerror
if err not in _ready_errors: if err not in _ready_errors:
raise raise
if err == _winapi.ERROR_IO_PENDING: if err == _winapi.ERROR_IO_PENDING:
...@@ -853,7 +853,16 @@ if sys.platform == 'win32': ...@@ -853,7 +853,16 @@ if sys.platform == 'win32':
else: else:
# If o.fileno() is an overlapped pipe handle and # If o.fileno() is an overlapped pipe handle and
# err == 0 then there is a zero length message # err == 0 then there is a zero length message
# in the pipe, but it HAS NOT been consumed. # in the pipe, but it HAS NOT been consumed...
if ov and sys.getwindowsversion()[:2] >= (6, 2):
# ... except on Windows 8 and later, where
# the message HAS been consumed.
try:
_, err = ov.GetOverlappedResult(False)
except OSError as e:
err = e.winerror
if not err and hasattr(o, '_got_empty_message'):
o._got_empty_message = True
ready_objects.add(o) ready_objects.add(o)
timeout = 0 timeout = 0
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment