diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c index 9c31d828d..0dedd7c5d 100644 --- a/hw/xfree86/common/xf86Init.c +++ b/hw/xfree86/common/xf86Init.c @@ -1012,7 +1012,6 @@ OsVendorInit(void) } #endif #endif - OsReleaseSIGIO(); beenHere = TRUE; } diff --git a/include/os.h b/include/os.h index 34ca1f557..7701c3977 100644 --- a/include/os.h +++ b/include/os.h @@ -340,6 +340,9 @@ OsBlockSIGIO(void); extern _X_EXPORT void OsReleaseSIGIO(void); +extern void +OsResetSignals(void); + extern _X_EXPORT void OsAbort(void) _X_NORETURN; diff --git a/os/osinit.c b/os/osinit.c index 6cc040178..2eb1f7a8f 100644 --- a/os/osinit.c +++ b/os/osinit.c @@ -288,6 +288,7 @@ OsInit(void) } TimerInit(); OsVendorInit(); + OsResetSignals(); /* * No log file by default. OsVendorInit() should call LogInit() with the * log file name if logging to a file is desired. diff --git a/os/utils.c b/os/utils.c index 253793467..82192e865 100644 --- a/os/utils.c +++ b/os/utils.c @@ -1243,6 +1243,19 @@ OsReleaseSignals(void) #endif } +void +OsResetSignals(void) +{ +#ifdef SIG_BLOCK + while (BlockedSignalCount > 0) + OsReleaseSignals(); +#ifdef SIGIO + while (sigio_blocked > 0) + OsReleaseSIGIO(); +#endif +#endif +} + /* * Pending signals may interfere with core dumping. Provide a * mechanism to block signals when aborting.