From 3cc635dabb0780914d51cdfad57912608196d099 Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Thu, 9 Aug 2012 02:43:41 +0200 Subject: faulthandler: fix the handler of user signals Restore the errno before calling the previous signal handler, and not after. --- Modules/faulthandler.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c index 469e490..4aa9124 100644 --- a/Modules/faulthandler.c +++ b/Modules/faulthandler.c @@ -659,17 +659,22 @@ faulthandler_user(int signum) #ifdef HAVE_SIGACTION if (user->chain) { (void)sigaction(signum, &user->previous, NULL); + errno = save_errno; + /* call the previous signal handler */ raise(signum); + + save_errno = errno; (void)faulthandler_register(signum, user->chain, NULL); + errno = save_errno; } #else if (user->chain) { + errno = save_errno; /* call the previous signal handler */ user->previous(signum); } #endif - errno = save_errno; } static int -- cgit v0.12