From: Victor Stinner Date: Thu, 17 Jul 2014 20:45:42 +0000 (+0200) Subject: (Merge 3.4) Python issue #21645, Tulip issue 192: Rewrite signal handling X-Git-Tag: v3.5.0a1~1261 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2fa2c3dfc5d9f0e61a9ffd37b5edeb04e8b8faeb;p=thirdparty%2FPython%2Fcpython.git (Merge 3.4) Python issue #21645, Tulip issue 192: Rewrite signal handling Since Python 3.3, the C signal handler writes the signal number into the wakeup file descriptor and then schedules the Python call using Py_AddPendingCall(). asyncio uses the wakeup file descriptor to wake up the event loop, and relies on Py_AddPendingCall() to schedule the final callback with call_soon(). If the C signal handler is called in a thread different than the thread of the event loop, the loop is awaken but Py_AddPendingCall() was not called yet. In this case, the event loop has nothing to do and go to sleep again. Py_AddPendingCall() is called while the event loop is sleeping again and so the final callback is not scheduled immediatly. This patch changes how asyncio handles signals. Instead of relying on Py_AddPendingCall() and the wakeup file descriptor, asyncio now only relies on the wakeup file descriptor. asyncio reads signal numbers from the wakeup file descriptor to call its signal handler. --- 2fa2c3dfc5d9f0e61a9ffd37b5edeb04e8b8faeb