X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilcutil%2Funix%2Fsilcunixthread.c;h=7f52de901daca7baafd9d1c1bca4aaf949e52ad3;hb=9905799a86c606304fd7df2cd401de1740a272a1;hp=b32f61d62d6d663f4042b7d6b513ae65ea6f0dcc;hpb=a9f6fe9c6d50556c346119b44e46169f93147134;p=silc.git diff --git a/lib/silcutil/unix/silcunixthread.c b/lib/silcutil/unix/silcunixthread.c index b32f61d6..7f52de90 100644 --- a/lib/silcutil/unix/silcunixthread.c +++ b/lib/silcutil/unix/silcunixthread.c @@ -104,9 +104,8 @@ SilcBool silc_thread_wait(SilcThread thread, void **exit_value) struct SilcMutexStruct { #ifdef SILC_THREADS pthread_mutex_t mutex; -#else - void *tmp; #endif /* SILC_THREADS */ + unsigned int locked : 1; }; SilcBool silc_mutex_alloc(SilcMutex *mutex) @@ -116,6 +115,7 @@ SilcBool silc_mutex_alloc(SilcMutex *mutex) if (*mutex == NULL) return FALSE; pthread_mutex_init(&(*mutex)->mutex, NULL); + (*mutex)->locked = FALSE; return TRUE; #else return FALSE; @@ -137,7 +137,8 @@ void silc_mutex_lock(SilcMutex mutex) #ifdef SILC_THREADS if (mutex) { if (pthread_mutex_lock(&mutex->mutex)) - assert(FALSE); + SILC_ASSERT(FALSE); + mutex->locked = TRUE; } #endif /* SILC_THREADS */ } @@ -147,16 +148,25 @@ void silc_mutex_unlock(SilcMutex mutex) #ifdef SILC_THREADS if (mutex) { if (pthread_mutex_unlock(&mutex->mutex)) - assert(FALSE); + SILC_ASSERT(FALSE); + mutex->locked = FALSE; } #endif /* SILC_THREADS */ } +void silc_mutex_assert_locked(SilcMutex mutex) +{ +#ifdef SILC_THREADS + if (mutex) + SILC_ASSERT(mutex->locked); +#endif /* SILC_THREADS */ +} + -/**************************** SILC CondVar API ******************************/ +/****************************** SILC Cond API *******************************/ /* SILC Conditional Variable context */ -struct SilcCondVarStruct { +struct SilcCondStruct { #ifdef SILC_THREADS pthread_cond_t cond; #else @@ -164,7 +174,7 @@ struct SilcCondVarStruct { #endif /* SILC_THREADS*/ }; -SilcBool silc_condvar_alloc(SilcCondVar *cond) +SilcBool silc_cond_alloc(SilcCond *cond) { #ifdef SILC_THREADS *cond = silc_calloc(1, sizeof(**cond)); @@ -177,7 +187,7 @@ SilcBool silc_condvar_alloc(SilcCondVar *cond) #endif /* SILC_THREADS*/ } -void silc_condvar_free(SilcCondVar cond) +void silc_cond_free(SilcCond cond) { #ifdef SILC_THREADS pthread_cond_destroy(&cond->cond); @@ -185,29 +195,29 @@ void silc_condvar_free(SilcCondVar cond) #endif /* SILC_THREADS*/ } -void silc_condvar_signal(SilcCondVar cond) +void silc_cond_signal(SilcCond cond) { #ifdef SILC_THREADS pthread_cond_signal(&cond->cond); #endif /* SILC_THREADS*/ } -void silc_condvar_broadcast(SilcCondVar cond) +void silc_cond_broadcast(SilcCond cond) { #ifdef SILC_THREADS pthread_cond_broadcast(&cond->cond); #endif /* SILC_THREADS*/ } -void silc_condvar_wait(SilcCondVar cond, SilcMutex mutex) +void silc_cond_wait(SilcCond cond, SilcMutex mutex) { #ifdef SILC_THREADS pthread_cond_wait(&cond->cond, &mutex->mutex); #endif /* SILC_THREADS*/ } -SilcBool silc_condvar_timedwait(SilcCondVar cond, SilcMutex mutex, - int timeout) +SilcBool silc_cond_timedwait(SilcCond cond, SilcMutex mutex, + int timeout) { #ifdef SILC_THREADS struct timespec t; @@ -218,5 +228,7 @@ SilcBool silc_condvar_timedwait(SilcCondVar cond, SilcMutex mutex, } return pthread_cond_wait(&cond->cond, &mutex->mutex) == 0; +#else + return FALSE; #endif /* SILC_THREADS*/ }