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


self._closed = True 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): async def wait_closed(self):
''' '''
https://docs.python.org/3/library/asyncio-stream.html#asyncio.StreamWriter.wait_closed 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 return


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


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


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

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


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

Loading…
Cancel
Save