[Box Backup-commit] COMMIT r1803 - box/chris/merge/lib/common

boxbackup-dev at fluffy.co.uk boxbackup-dev at fluffy.co.uk
Sat Sep 1 17:58:15 BST 2007


Author: chris
Date: 2007-09-01 17:58:15 +0100 (Sat, 01 Sep 2007)
New Revision: 1803

Modified:
   box/chris/merge/lib/common/Timer.cpp
Log:
Use sigset() instead of signal() to ensure that SysV systems (like Solaris)
will not clear our signal handler after firing it.


Modified: box/chris/merge/lib/common/Timer.cpp
===================================================================
--- box/chris/merge/lib/common/Timer.cpp	2007-09-01 15:11:30 UTC (rev 1802)
+++ box/chris/merge/lib/common/Timer.cpp	2007-09-01 16:58:15 UTC (rev 1803)
@@ -39,7 +39,7 @@
 		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 @@
 		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 @@
 	}
 
 	#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




More information about the Boxbackup-commit mailing list