mirror of
https://github.com/python/cpython
synced 2026-09-29 09:55:31 +03:00
Patch #975056 - fixes for restartable signals on *BSD. In addition,
a few remaining calls to signal() were converted to PyOS_setsig().
This commit is contained in:
parent
7d428788e1
commit
9ceaa72ebe
5 changed files with 28 additions and 48 deletions
|
|
@ -137,7 +137,7 @@ intcatcher(int sig)
|
|||
Py_Exit(1);
|
||||
break;
|
||||
}
|
||||
signal(SIGINT, intcatcher);
|
||||
PyOS_setsig(SIGINT, intcatcher);
|
||||
Py_AddPendingCall(checksignals_witharg, NULL);
|
||||
}
|
||||
|
||||
|
|
@ -146,23 +146,14 @@ static void (*old_siginthandler)(int) = SIG_DFL;
|
|||
void
|
||||
PyOS_InitInterrupts(void)
|
||||
{
|
||||
if ((old_siginthandler = signal(SIGINT, SIG_IGN)) != SIG_IGN)
|
||||
signal(SIGINT, intcatcher);
|
||||
#ifdef HAVE_SIGINTERRUPT
|
||||
/* This is for SunOS and other modern BSD derivatives.
|
||||
It means that system calls (like read()) are not restarted
|
||||
after an interrupt. This is necessary so interrupting a
|
||||
read() or readline() call works as expected.
|
||||
XXX On old BSD (pure 4.2 or older) you may have to do this
|
||||
differently! */
|
||||
siginterrupt(SIGINT, 1);
|
||||
#endif /* HAVE_SIGINTERRUPT */
|
||||
if ((old_siginthandler = PyOS_setsig(SIGINT, SIG_IGN)) != SIG_IGN)
|
||||
PyOS_setsig(SIGINT, intcatcher);
|
||||
}
|
||||
|
||||
void
|
||||
PyOS_FiniInterrupts(void)
|
||||
{
|
||||
signal(SIGINT, old_siginthandler);
|
||||
PyOS_setsig(SIGINT, old_siginthandler);
|
||||
}
|
||||
|
||||
int
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue