[Python-checkins] [python/cpython] 4ae014: bpo-30038: fix race condition in signal delivery +...

GitHub noreply at github.com
Tue May 16 17:12:13 EDT 2017


 Branch: refs/heads/master
 Home: https://github.com/python/cpython
 Commit: 4ae01496971624c75080431806ed1c08e00f22c7
 https://github.com/python/cpython/commit/4ae01496971624c75080431806ed1c08e00f22c7
 Author: Nathaniel J. Smith <njs at pobox.com>
 Date: 2017年05月16日 (2017年5月16日)
 Changed paths:
 M Modules/signalmodule.c
 Log Message:
 -----------
 bpo-30038: fix race condition in signal delivery + wakeup fd (#1082)
Before, it was possible to get the following sequence of
events (especially on Windows, where the C-level signal handler for
SIGINT is run in a separate thread):
- SIGINT arrives
- trip_signal is called
- trip_signal writes to the wakeup fd
- the main thread wakes up from select()-or-equivalent
- the main thread checks for pending signals, but doesn't see any
- the main thread drains the wakeup fd
- the main thread goes back to sleep
- trip_signal sets is_tripped=1 and calls Py_AddPendingCall to notify
 the main thread the it should run the Python-level signal handler
- the main thread doesn't notice because it's asleep
This has been causing repeated failures in the Trio test suite:
 https://github.com/python-trio/trio/issues/119


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /