diff -r 3f739f42be51 Modules/signalmodule.c --- a/Modules/signalmodule.c Mon Oct 01 07:18:55 2012 +0300 +++ b/Modules/signalmodule.c Tue Oct 02 22:46:11 2012 -0300 @@ -174,6 +174,11 @@ static int checksignals_witharg(void * unused) { + int error = (int) unused; + if (error == EBADF) { + PyErr_Format(PyExc_ValueError, "Invalid wakeup FD"); + return NULL; + } return PyErr_CheckSignals(); } @@ -185,7 +190,10 @@ Handlers[sig_num].tripped = 1; if (wakeup_fd != -1) { byte = (unsigned char)sig_num; - write(wakeup_fd, &byte, 1); + if (write(wakeup_fd, &byte, 1) == -1) { + Py_AddPendingCall(checksignals_witharg, errno); + return; + } } if (is_tripped) return;