From 20120e59a6c5263ac45ce593c462604c5b9d9b09 Mon Sep 17 00:00:00 2001 From: Leon Timmermans Date: Mon, 26 Dec 2011 19:06:54 +0200 Subject: [PATCH] Signal handlers must run before sigsuspend returns The whole point of sigsuspend and pause is to wait until a signal has arrived, and then return *after* it has been triggered. Currently delayed/"safe" signals prevent that from happening, which might cause race conditions. This patch prevents that (as far as possible) by running the signal handlers ASAP. --- ext/POSIX/POSIX.xs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ext/POSIX/POSIX.xs b/ext/POSIX/POSIX.xs index 27aabb5..1bad5e1 100644 --- a/ext/POSIX/POSIX.xs +++ b/ext/POSIX/POSIX.xs @@ -1435,6 +1435,8 @@ sigpending(sigset) RETVAL = ix ? sigsuspend(sigset) : sigpending(sigset); OUTPUT: RETVAL + CLEANUP: + PERL_ASYNC_CHECK(); SysRet sigprocmask(how, sigset, oldsigset = 0) @@ -1880,6 +1882,8 @@ pathconf(filename, name) SysRet pause() + CLEANUP: + PERL_ASYNC_CHECK(); SysRet setgid(gid) -- 2.7.4