Eryk Sun <[email protected]> added the comment:
> The race on := is much smaller than the original race
> and I suspect in practice will be very hard to hit.
In Windows, the acquire() method of a lock can't be interrupted. Thus, in the
main thread, an exception from Ctrl+C gets raised as soon as acquire() returns.
This exception definitely will interrupt the assignment. Here's a workaround:
global scope:
_WINDOWS = _sys.platform == 'win32'
in _wait_for_tstate_lock():
acquired = None
try:
if acquired := lock.acquire(block, timeout):
lock.release()
self._stop()
except:
if _WINDOWS and acquired is None:
acquired = True
if acquired:
lock.release()
self._stop()
raise
This doesn't help in POSIX if the STORE_FAST instruction that assigns
`acquired` gets interrupted. This can't be distinguished from acquire() itself
getting interrupted. But at least the window for this is as small as possible.
----------
nosy: +eryksun
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue46726>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com