summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2016-11-02 21:29:22 +0100
committerAndy Wingo <wingo@pobox.com>2016-11-02 21:29:30 +0100
commit0f5a59b215fdeff23d2632de1dfe7a22bfcb9d82 (patch)
tree4bd4e92f86c2f5b65099944b4ff6fb8bfe13ebfa
parent10471f40fe7ceed626debd36b2a5fec0a4b49b5a (diff)
downloadguile-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.c22
-rw-r--r--module/ice-9/threads.scm5
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.