[PATCH 2/5] os: add OsBlockSIGIO and OsReleaseSIGIO
Peter Hutterer
peter.hutterer at who-t.net
Tue Jul 3 22:13:46 PDT 2012
On Mon, Jul 02, 2012 at 11:30:13PM -0700, Keith Packard wrote:
> Peter Hutterer <peter.hutterer at who-t.net> writes:
>
> > void
> > OsReleaseSignals(void)
> > {
> > #ifdef SIG_BLOCK
> > if (--BlockedSignalCount == 0) {
> > sigprocmask(SIG_SETMASK, &PreviousSignalMask, 0);
> > + OsReleaseSIGIO();
> > }
> > #endif
>
> Should you use SIG_UNBLOCK instead of SIG_SETMASK? It took me several
> minutes to figure out that SIG_SETMASK will work because
> PreviousSignalMask *always* contains SIGIO as it is set after
> the call to OsBlockSIGIO in OsBlockSignals. Either that, or a comment
> explaining why this works so future-me doesn't get confused again...
We'd have to mask out SIGIO from PrevSignalMask then for SIG_UNBLOCK to
work:
diff --git a/os/utils.c b/os/utils.c
index 55f58b9..0f6419c 100644
--- a/os/utils.c
+++ b/os/utils.c
@@ -1179,6 +1179,11 @@ OsBlockSignals(void)
sigaddset(&set, SIGTTOU);
sigaddset(&set, SIGCHLD);
sigprocmask(SIG_BLOCK, &set, &PreviousSignalMask);
+
+#ifdef SIGIO
+ /* OsBlockSIGIO is in charge of SIGIO*/
+ sigdelset(&PreviousSignalMask, SIGIO);
+#endif
}
#endif
}
@@ -1235,7 +1240,7 @@ OsReleaseSignals(void)
{
#ifdef SIG_BLOCK
if (--BlockedSignalCount == 0) {
- sigprocmask(SIG_SETMASK, &PreviousSignalMask, 0);
+ sigprocmask(SIG_UNBLOCK, &PreviousSignalMask, 0);
OsReleaseSIGIO();
}
#endif
Works for for me too, whichever you prefer.
Cheers,
Peter
More information about the xorg-devel
mailing list