From: Pekka Riikonen Date: Sat, 23 Feb 2008 13:41:33 +0000 (+0200) Subject: Added silc_mutex_trylock X-Git-Tag: 1.2.beta2~13 X-Git-Url: http://git.silcnet.org/gitweb/?p=runtime.git;a=commitdiff_plain;h=631f1669539aaa58b8c49c4d431930f7ab68a633 Added silc_mutex_trylock --- diff --git a/lib/silcutil/silcmutex.h b/lib/silcutil/silcmutex.h index 878d37de..2ff79f39 100644 --- a/lib/silcutil/silcmutex.h +++ b/lib/silcutil/silcmutex.h @@ -133,6 +133,22 @@ void silc_mutex_lock(SilcMutex mutex); ***/ void silc_mutex_unlock(SilcMutex mutex); +/****f* silcutil/silc_mutex_trylock + * + * SYNOPSIS + * + * SilcBool silc_mutex_trylock(SilcMutex mutex); + * + * DESCRIPTION + * + * Attempts to lock the `mutex'. Returns TRUE if the caller was able + * to acquire the lock and FALSE if the mutex is already locked. If the + * mutex is already locked the caller cannot acquire the lock at this + * time. + * + ***/ +SilcBool silc_mutex_trylock(SilcMutex mutex); + /****f* silcutil/silc_mutex_assert_locked * * SYNOPSIS diff --git a/lib/silcutil/unix/silcunixthread.c b/lib/silcutil/unix/silcunixthread.c index 286a26db..fd30cf3d 100644 --- a/lib/silcutil/unix/silcunixthread.c +++ b/lib/silcutil/unix/silcunixthread.c @@ -200,6 +200,19 @@ void silc_mutex_unlock(SilcMutex mutex) #endif /* SILC_THREADS */ } +SilcBool silc_mutex_trylock(SilcMutex mutex) +{ +#ifdef SILC_THREADS + if (mutex) { + if (pthread_mutex_trylock(&mutex->mutex) == 0) { + mutex->locked = TRUE; + return TRUE; + } + } +#endif /* SILC_THREADS */ + return FALSE; +} + void silc_mutex_assert_locked(SilcMutex mutex) { #ifdef SILC_THREADS