Commit Graph

53 Commits

Author SHA1 Message Date
Tobias Brunner 0d30d73eb9 thread: Properly clean up meta data of main thread 2014-03-07 18:28:38 +01:00
Martin Willi bbb62267e0 thread: Note that tread_cancellation_point temporarily activates cancelability 2013-11-06 10:31:00 +01:00
Tobias Brunner 1dd58b0e21 Fixed some typos 2013-10-29 11:44:23 +01:00
Martin Willi 1a20a22d09 rwlock: Disable thread cancelability while waiting in (fallback) rwlock
An rwlock wait is not a thread cancellation point. As a canceled thread
would not have released the mutex, the rwlock would have been left in unusable
state.
2013-10-24 14:53:53 +02:00
Martin Willi 181d071363 rwlock: Don't use buggy pthread_rwlock on OS X
Recursive read locks don't seem to work properly, at least on 10.9.
2013-10-24 14:53:47 +02:00
Martin Willi b08292a520 semaphore: Support cancellation in wait functions of semaphore fallback
Semaphore wait functions should be a thread cancellation point, but did
not properly release the mutex in the fallback implementation.
2013-10-23 16:08:40 +02:00
Martin Willi 47c76c1b05 rwlock: Re-acquire rwlock even if condvar wait times out
A caller expects that the associated rwlock is held, whether the condvar
gets signaled or the wait times out.
2013-10-23 11:52:26 +02:00
Martin Willi 01c0267778 thread: implicitly create thread_t if an external thread calls thread_current() 2013-07-18 12:17:53 +02:00
Martin Willi b0ccd14f2a semaphore: similar to thread_create(), semaphore_create() is used by Mach
The compiler spits no warning, but the wrong symbol is used when calling
semaphore_create() from strongSwan. Override the name with a #define to force
the use of our semaphore_create().
2013-05-06 16:06:48 +02:00
Tobias Brunner bc07fef09c 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.
2013-02-26 11:40:34 +01:00
Martin Willi 4185c64464 Use a ./configure check to detect pthread spinlock availability
_POSIX_SPIN_LOCKS does not seem to be defined correctly on all
systems (Debian libc 2.3.6). Fixes #262.
2012-12-18 09:51:33 +01:00
Tobias Brunner f05b427265 Moved debug.[ch] to utils folder 2012-10-24 16:00:51 +02:00
Tobias Brunner 12642a6831 Moved data structures to new collections subfolder 2012-10-24 16:00:49 +02:00
Tobias Brunner eecd41e349 Use a helper function to add milliseconds to timeval structs 2012-10-18 12:25:59 +02:00
Tobias Brunner e811cf152a Properly handle thread cancelation in rwlock_condvar_t 2012-09-21 18:16:27 +02:00
Tobias Brunner 60dc44648f Added a condvar implementation that works with rwlock_t 2012-09-21 18:16:27 +02:00
Martin Willi 88a5abf5e2 Don't use POSIX semaphores if a MONOTONIC clock is available
POSIX semaphores use CLOCK_REALTIME, but our semaphore_t abstraction
expects CLOCK_MONOTONIC based times. Use the mutex/condvar based
fallback if time_monotonic() actuall returns monotonic times.
2012-08-20 18:01:20 +02:00
Martin Willi 907d3d0f1d Add a mutex/condvar based semaphore implementation if sem_timedwait is unavailable
Fixes #214.
2012-08-20 17:20:26 +02:00
Tobias Brunner 09ae3d79ca Merge branch 'android-app'
This branch introduces a userland IPsec implementation (libipsec) and an
Android App which targets the VpnService API that is provided by Android 4+.

The implementation is based on the bachelor thesis 'Userland IPsec for
Android 4' by Giuliano Grassi and Ralf Sager.
2012-08-13 12:07:52 +02:00
Tobias Brunner efbb5e8c57 Ensure thread IDs always start with 1 even if the library is reused
Within the Android App the library stays loaded in memory and is just
initialized/deinitialized with each connection, the static thread
counter would continuously increase without this patch.
2012-08-13 11:28:08 +02:00
Martin Willi a63192479d If _POSIX_SPIN_LOCKS is defined as -1, it is not available 2012-08-10 17:02:46 +02:00
Tobias Brunner decc467a4f Implemented recursive mutex without thread-specific counter 2012-08-03 11:30:18 +02:00
Tobias Brunner 920f29e7d5 Use a single thread-specific value for our custom rwlock_t implementation
The pthread implementation on Android currently only supports 64
different thread-specific values per process, which we hit easily when
every rwlock_t requires one.
2012-08-03 11:30:18 +02:00
Tobias Brunner 2b19dd3502 Properly cleanup thread-local values for the threads destroying thread_value_t objects 2012-07-12 09:43:27 +02:00
Tobias Brunner 12fa85c664 Added wrapper for POSIX spin locks 2012-07-04 10:13:49 +02:00
Tobias Brunner 4d21000cf7 Added recursive read_lock support to our own implementation of rwlock_t. 2012-05-02 14:45:38 +02:00
Tobias Brunner 8f6c13271c Added a wrapper class around POSIX semaphores. 2012-05-02 14:45:37 +02:00
Tobias Brunner 17e3a92661 Fix gettid() on Android, which is defined in unistd.h there. 2012-01-12 11:08:22 +01:00
Tobias Brunner 66f16d9629 Use native gettid() if available (which is the case on Android). 2012-01-10 18:31:33 +01:00
Tobias Brunner c17f6f96e2 Log native thread ID when a thread is created.
If possible gettid() is used, otherwise pthread_self() is logged (which is
not completely portable, but seems to work on most supported platforms).
2011-12-16 16:44:38 +01:00
Martin Willi 005b02cbe3 Create a dummy pthread key for value "0", as some buggy PKCS#11 libraries mangle it 2011-12-07 13:42:07 +01:00
Tobias Brunner c8541efe70 Migrated thread_t to INIT/METHOD macros. 2011-10-03 15:54:36 +02:00
Tobias Brunner f5808078cb Migrated mutex_t to INIT/METHOD macros. 2011-10-03 15:45:17 +02:00
Tobias Brunner 7fa43a9036 Migrated rwlock_t to INIT/METHOD macros. 2011-10-03 15:31:04 +02:00
Tobias Brunner 242f7c857f Migrated thread_value_t to INIT/METHOD macros. 2011-10-03 14:57:07 +02:00
Andreas Steffen 51f259a82d id of non-registered threads defaults to 0 2011-05-06 06:22:19 +02:00
Martin Willi 091d178060 Option to skip slow addr2line resolution in leak-detective 2010-05-20 17:37:18 +02:00
Tobias Brunner 726c0ae9d3 We have to rename thread_create on Mac OS X because it conflicts with a syscall. 2010-04-29 14:52:20 +02:00
Tobias Brunner 361f416d2c The mutex of a thread has to be locked when destroying it. 2010-04-29 13:30:51 +02:00
Tobias Brunner 8b0e09103b Adding DBG_LIB to all calls of libstrongswan's version of DBG*. 2010-04-06 12:47:40 +02:00
Andreas Steffen b7fd2ea76c corrected captions 2010-02-01 12:44:44 +01:00
Tobias Brunner 85202e8795 Added a workaround for the missing pthread_cancel on Android. 2009-12-23 17:03:42 +01:00
Tobias Brunner b2944d71ca Use pthread_cond_timedwait_monotonic on Android. 2009-12-23 17:03:41 +01:00
Tobias Brunner 4ec2c94b5d Readding changes that got lost during refactoring/rebasing. 2009-12-23 17:03:41 +01:00
Tobias Brunner 4a5a5dd290 Using the thread wrapper in charon, libstrongswan and their plugins. 2009-12-23 17:03:41 +01:00
Tobias Brunner c48eea9203 Adding an object-oriented wrapper for thread-specific values. 2009-12-23 17:02:26 +01:00
Tobias Brunner 0d5c6a28d5 Adding an object-oriented wrapper for threads. 2009-12-23 17:02:26 +01:00
Tobias Brunner 866dc0134a Check for pthread_condattr_init added to configure script. 2009-12-23 17:02:25 +01:00
Tobias Brunner 5fe538504e Moved implementation of condvar_t to mutex.c because it requires access to private_mutex_t. 2009-12-23 17:02:25 +01:00
Tobias Brunner eba64cef41 Separated the public interfaces of the threading primitives. 2009-12-23 17:01:53 +01:00