Ben Darnell <ben.darn...@gmail.com> added the comment:

I just spent some time digging into this. Each call to `run_forever` starts a 
call to `_loop_self_reading`, then attempts to cancel it before returning:

https://github.com/python/cpython/blob/1ed61617a4a6632905ad6a0b440cd2cafb8b6414/Lib/asyncio/windows_events.py#L312-L325

The comment at line 321 is not entirely accurate: the future will not resolve 
in the future, but it may have *already* resolved, and added its callback to 
the call_soon queue. This callback will run if the event loop is restarted 
again. Since `_loop_self_reading` calls itself, this results in two copies of 
the "loop" running concurrently and stepping on each other's 
`_self_reading_futures`. 

This appears to be fairly harmless except for noise in the logs when only one 
of the loops is stopped cleanly.

I believe the simplest fix is for `_loop_self_reading` to compare its argument 
to `self._self_reading_future` to determine if it is the "current" loop and if 
not, don't reschedule anything.

----------
nosy: +Ben.Darnell

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue39010>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to