aboutsummaryrefslogtreecommitdiffstats
path: root/src/libstrongswan/threading
diff options
context:
space:
mode:
authorTobias Brunner <tobias@strongswan.org>2013-02-26 11:07:28 +0100
committerTobias Brunner <tobias@strongswan.org>2013-02-26 11:40:34 +0100
commitbc07fef09c3df419ac1bc7c7f1e669b51e92569c (patch)
treefe58101a1c301e41ff6b10a595579ba33bc6767b /src/libstrongswan/threading
parent0ac34e9e6abb9c7d8e0ad707918f6bcdbdad4f87 (diff)
downloadstrongswan-bc07fef09c3df419ac1bc7c7f1e669b51e92569c.tar.bz2
strongswan-bc07fef09c3df419ac1bc7c7f1e669b51e92569c.tar.xz
Use SIGUSR2 for SIG_CANCEL on Android
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.
Diffstat (limited to 'src/libstrongswan/threading')
-rw-r--r--src/libstrongswan/threading/thread.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/libstrongswan/threading/thread.c b/src/libstrongswan/threading/thread.c
index e524409c7..d6d98d1ef 100644
--- a/src/libstrongswan/threading/thread.c
+++ b/src/libstrongswan/threading/thread.c
@@ -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 */