Use SIGUSR2 for SIG_CANCEL on Android
authorTobias Brunner <tobias@strongswan.org>
Tue, 26 Feb 2013 10:07:28 +0000 (11:07 +0100)
committerTobias Brunner <tobias@strongswan.org>
Tue, 26 Feb 2013 10:40:34 +0000 (11:40 +0100)
SIGRTMIN is defined as 32 while sigset_t is defined as
unsigned long (i.e. holds 32 signals).  Hence, the signal
could never be blocked.  Sending the signal still canceled
threads, but sometimes in situations where they shouldn't
have been canceled (e.g. while holding a lock).

Fixes #298.

src/libstrongswan/threading/thread.c

index e524409..d6d98d1 100644 (file)
@@ -129,7 +129,11 @@ static thread_value_t *current_thread;
 
 #ifndef HAVE_PTHREAD_CANCEL
 /* if pthread_cancel is not available, we emulate it using a signal */
+#ifdef ANDROID
+#define SIG_CANCEL SIGUSR2
+#else
 #define SIG_CANCEL (SIGRTMIN+7)
+#endif
 
 /* the signal handler for SIG_CANCEL uses pthread_exit to terminate the
  * "cancelled" thread */