diff options
author | Andy Wingo <wingo@pobox.com> | 2016-11-02 21:29:22 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2016-11-02 21:29:30 +0100 |
commit | 0f5a59b215fdeff23d2632de1dfe7a22bfcb9d82 (patch) | |
tree | 4bd4e92f86c2f5b65099944b4ff6fb8bfe13ebfa | |
parent | 10471f40fe7ceed626debd36b2a5fec0a4b49b5a (diff) | |
download | guile-0f5a59b215fdeff23d2632de1dfe7a22bfcb9d82.tar.gz |
try-mutex in terms of mutex-lock
* libguile/threads.c (scm_try_mutex): Just call scm_lock_mutex_timed
with a zero timeout.
* module/ice-9/threads.scm (try-mutex): Likewise.
-rw-r--r-- | libguile/threads.c | 22 | ||||
-rw-r--r-- | module/ice-9/threads.scm | 5 |
2 files changed, 8 insertions, 19 deletions
diff --git a/libguile/threads.c b/libguile/threads.c index 43bd31310..022534808 100644 --- a/libguile/threads.c +++ b/libguile/threads.c @@ -1311,27 +1311,11 @@ scm_dynwind_lock_mutex (SCM mutex) SCM_F_WIND_EXPLICITLY); } -SCM_DEFINE (scm_try_mutex, "try-mutex", 1, 0, 0, - (SCM mutex), -"Try to lock @var{mutex}. If the mutex is already locked by someone " -"else, return @code{#f}. Else lock the mutex and return @code{#t}. ") -#define FUNC_NAME s_scm_try_mutex +SCM +scm_try_mutex (SCM mutex) { - SCM exception; - int ret = 0; - scm_t_timespec cwaittime, *waittime = NULL; - - SCM_VALIDATE_MUTEX (1, mutex); - - to_timespec (scm_from_int(0), &cwaittime); - waittime = &cwaittime; - - exception = fat_mutex_lock (mutex, waittime, SCM_UNDEFINED, &ret); - if (!scm_is_false (exception)) - scm_ithrow (SCM_CAR (exception), scm_list_1 (SCM_CDR (exception)), 1); - return ret ? SCM_BOOL_T : SCM_BOOL_F; + return scm_lock_mutex_timed (mutex, SCM_INUM0, SCM_UNDEFINED); } -#undef FUNC_NAME /*** Fat condition variables */ diff --git a/module/ice-9/threads.scm b/module/ice-9/threads.scm index 555143e70..119334b46 100644 --- a/module/ice-9/threads.scm +++ b/module/ice-9/threads.scm @@ -136,6 +136,11 @@ Once @var{thunk} or @var{handler} returns, the return value is made the (lp)))) thread)) +(define* (try-mutex mutex) + "Try to lock @var{mutex}. If the mutex is already locked, return +@code{#f}. Otherwise lock the mutex and return @code{#t}." + (lock-mutex mutex 0)) + ;;; Macros first, so that the procedures expand correctly. |