[New-bugs-announce] [issue33727] Server.wait_closed() doesn't always wait for its transports to fihish

Yury Selivanov report at bugs.python.org
Fri Jun 1 01:11:49 EDT 2018


New submission from Yury Selivanov <yselivanov at gmail.com>:

Server.wait_closed() currently does two checks:

1. if _sockets is None -- means that Server.close() was called
2. if self._waiters is None -- means that Server._wakeup() was called

if (1) *or* (2) is true, wait_closed() just returns without waiting on anything.

However, when Server.close() is called there might be still active transports serving requests.  Server.wait_closed() should wait until all of them are detached, even if Server._sockets is already reset.

So the below implementation:

    async def wait_closed(self):
        if self._sockets is None or self._waiters is None:
            return
        waiter = self._loop.create_future()
        self._waiters.append(waiter)
        await waiter

should be changed to:

    async def wait_closed(self):
        if self._waiters is None:
            assert self._active_count == 0
            return
        waiter = self._loop.create_future()
        self._waiters.append(waiter)
        await waiter

----------
components: asyncio
messages: 318360
nosy: asvetlov, yselivanov
priority: normal
severity: normal
status: open
title: Server.wait_closed() doesn't always wait for its transports to fihish
versions: Python 3.6, Python 3.7, Python 3.8

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue33727>
_______________________________________


More information about the New-bugs-announce mailing list