diff options
author | Chris Wilson <chris+github@qwirx.com> | 2007-09-01 16:58:15 +0000 |
---|---|---|
committer | Chris Wilson <chris+github@qwirx.com> | 2007-09-01 16:58:15 +0000 |
commit | 86deff6eb3b2308ea88d78b2c4eba1208d9abfb4 (patch) | |
tree | 79228f350fd8fed2d817ab51d64203a5518b213b /lib/common | |
parent | f43a65d77ecccdc5e49d4dbfdbb498a7e0799afa (diff) |
Use sigset() instead of signal() to ensure that SysV systems (like Solaris)
will not clear our signal handler after firing it.
Diffstat (limited to 'lib/common')
-rw-r--r-- | lib/common/Timer.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/lib/common/Timer.cpp b/lib/common/Timer.cpp index fe565c21..a032f330 100644 --- a/lib/common/Timer.cpp +++ b/lib/common/Timer.cpp @@ -39,7 +39,7 @@ void Timers::Init() InitTimer(); SetTimerHandler(Timers::SignalHandler); #else - sighandler_t oldHandler = ::signal(SIGALRM, + sighandler_t oldHandler = ::sigset(SIGALRM, Timers::SignalHandler); ASSERT(oldHandler == 0); #endif // WIN32 && !PLATFORM_CYGWIN @@ -70,7 +70,7 @@ void Timers::Cleanup() int result = ::setitimer(ITIMER_REAL, &timeout, NULL); ASSERT(result == 0); - sighandler_t oldHandler = ::signal(SIGALRM, NULL); + sighandler_t oldHandler = ::sigset(SIGALRM, NULL); ASSERT(oldHandler == Timers::SignalHandler); #endif // WIN32 && !PLATFORM_CYGWIN @@ -146,8 +146,11 @@ void Timers::Reschedule() } #ifndef WIN32 - if (::signal(SIGALRM, Timers::SignalHandler) != Timers::SignalHandler) + void (*oldhandler)(int) = ::sigset(SIGALRM, Timers::SignalHandler); + if (oldhandler != Timers::SignalHandler) { + printf("Signal handler was %p, expected %p\n", + oldhandler, Timers::SignalHandler); THROW_EXCEPTION(CommonException, Internal) } #endif |