aboutsummaryrefslogtreecommitdiffstats
path: root/src/libstrongswan/threading
diff options
context:
space:
mode:
authorTobias Brunner <tobias@strongswan.org>2010-04-29 13:30:51 +0200
committerTobias Brunner <tobias@strongswan.org>2010-04-29 13:30:51 +0200
commit361f416d2c2ccbab6e8960812be861bcdb0cb493 (patch)
tree3dec421634f310423d271021206790b6a90bb7b7 /src/libstrongswan/threading
parent257e27df0785371ab0dfe3d45863865a3353087a (diff)
downloadstrongswan-361f416d2c2ccbab6e8960812be861bcdb0cb493.tar.bz2
strongswan-361f416d2c2ccbab6e8960812be861bcdb0cb493.tar.xz
The mutex of a thread has to be locked when destroying it.
Diffstat (limited to 'src/libstrongswan/threading')
-rw-r--r--src/libstrongswan/threading/thread.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/libstrongswan/threading/thread.c b/src/libstrongswan/threading/thread.c
index 86477a64d..3751bb749 100644
--- a/src/libstrongswan/threading/thread.c
+++ b/src/libstrongswan/threading/thread.c
@@ -300,6 +300,7 @@ thread_t *thread_create(thread_main_t main, void *arg)
if (pthread_create(&this->thread_id, NULL, (void*)thread_main, this) != 0)
{
DBG1(DBG_LIB, "failed to create thread!");
+ this->mutex->lock(this->mutex);
thread_destroy(this);
return NULL;
}
@@ -433,6 +434,7 @@ void threads_init()
void threads_deinit()
{
private_thread_t *main_thread = (private_thread_t*)thread_current();
+ main_thread->mutex->lock(main_thread->mutex);
thread_destroy(main_thread);
current_thread->destroy(current_thread);
id_mutex->destroy(id_mutex);