asyncio correctness and race-condition tweaks

pull/5/head
shipmints 2020-02-22 07:30:34 -05:00
rodzic 6d6dd997f1
commit 31165fb0e8
2 zmienionych plików z 2 dodań i 2 usunięć

Wyświetl plik

@ -176,13 +176,13 @@ class StreamWriterAdapter(WriterAdapter):
@asyncio.coroutine @asyncio.coroutine
def close(self): def close(self):
if not self.is_closed: if not self.is_closed:
self.is_closed = True # we first mark this closed so yields below don't cause races with waiting writes
yield from self._writer.drain() yield from self._writer.drain()
if self._writer.can_write_eof(): if self._writer.can_write_eof():
self._writer.write_eof() self._writer.write_eof()
self._writer.close() self._writer.close()
try: yield from self._writer.wait_closed() # py37+ try: yield from self._writer.wait_closed() # py37+
except AttributeError: pass except AttributeError: pass
self.is_closed = True
class BufferReader(ReaderAdapter): class BufferReader(ReaderAdapter):

Wyświetl plik

@ -51,7 +51,7 @@ def read_or_raise(reader, n=-1):
""" """
try: try:
data = yield from reader.read(n) data = yield from reader.read(n)
except (asyncio.IncompleteReadError, ConnectionResetError): except (asyncio.IncompleteReadError, ConnectionResetError, BrokenPipeError):
data = None data = None
if not data: if not data:
raise NoDataException("No more data") raise NoDataException("No more data")