Browse Source

restructure wait_closed to make sure it sends the chan closed...

main
John-Mark Gurney 4 years ago
parent
commit
ccdfd7a22d
1 changed files with 13 additions and 6 deletions
  1. +13
    -6
      wsfwd/__init__.py

+ 13
- 6
wsfwd/__init__.py View File

@@ -163,6 +163,12 @@ class WFStreamWriter:

return self._closed

async def _close_task(self):
await self._client._sendcmd(dict(cmd='chanclose', chan=self._stream))

self._closed_event.set()
self._closed_event = None

def close(self):
'''
https://docs.python.org/3/library/asyncio-stream.html#asyncio.StreamWriter.close
@@ -170,20 +176,18 @@ class WFStreamWriter:

self._closed = True

self._closed_event.set()
self._closed_event = None

self._closetask = asyncio.create_task(self._client._sendcmd(dict(cmd='chanclose', chan=self._stream)))
self._closetask = asyncio.create_task(self._close_task())

async def wait_closed(self):
'''
https://docs.python.org/3/library/asyncio-stream.html#asyncio.StreamWriter.wait_closed
'''

if self._closed:
ce = self._closed_event
if ce is None:
return

await self._closed_event.wait()
await ce.wait()

class WSFWDCommon:
'''
@@ -683,6 +687,9 @@ class Test(unittest.IsolatedAsyncioTestCase):
stdin.close()
await stdin.wait_closed()

# that it can be awaited multiple times
await stdin.wait_closed()

self.assertEqual(await stdout.read(), b'')

self.assertEqual(await proc.wait(), 0)

Loading…
Cancel
Save