[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Guile-commits] 13/24: Move more functionality to SRFI-18 mutex-unlock!
From: |
Andy Wingo |
Subject: |
[Guile-commits] 13/24: Move more functionality to SRFI-18 mutex-unlock! |
Date: |
Sun, 6 Nov 2016 18:00:45 +0000 (UTC) |
wingo pushed a commit to branch master
in repository guile.
commit b197a6a5afcb9a96a820005099bb226a2c760210
Author: Andy Wingo <address@hidden>
Date: Sat Nov 5 09:27:30 2016 +0100
Move more functionality to SRFI-18 mutex-unlock!
* module/srfi/srfi-18.scm (mutex-unlock!): Implement the
ignore-unlock-errors and wait-condition-variable behavior of
mutex-unlock! directly, without relying on Guile.
---
module/srfi/srfi-18.scm | 32 +++++++++++++++++---------------
1 file changed, 17 insertions(+), 15 deletions(-)
diff --git a/module/srfi/srfi-18.scm b/module/srfi/srfi-18.scm
index a19d5ba..85ca91e 100644
--- a/module/srfi/srfi-18.scm
+++ b/module/srfi/srfi-18.scm
@@ -324,21 +324,23 @@
#t)
(else #f)))))
-(define mutex-unlock!
- (case-lambda
- ((mutex)
- (set-mutex-owner! mutex #f)
- (threads:unlock-mutex (mutex-prim mutex))
- #t)
- ((mutex cond)
- (set-mutex-owner! mutex #f)
- (threads:unlock-mutex (mutex-prim mutex)
- (condition-variable-prim cond)))
- ((mutex cond timeout)
- (set-mutex-owner! mutex #f)
- (threads:unlock-mutex (mutex-prim mutex)
- (condition-variable-prim cond)
- timeout))))
+(define %unlock-sentinel (list 'unlock))
+(define* (mutex-unlock! mutex #:optional (cond-var %unlock-sentinel)
+ (timeout %unlock-sentinel))
+ (when (mutex-owner mutex)
+ (set-mutex-owner! mutex #f)
+ (cond
+ ((eq? cond-var %unlock-sentinel)
+ (threads:unlock-mutex (mutex-prim mutex)))
+ ((eq? timeout %unlock-sentinel)
+ (threads:wait-condition-variable (condition-variable-prim cond-var)
+ (mutex-prim mutex))
+ (threads:unlock-mutex (mutex-prim mutex)))
+ ((threads:wait-condition-variable (condition-variable-prim cond-var)
+ (mutex-prim mutex)
+ timeout)
+ (threads:unlock-mutex (mutex-prim mutex)))
+ (else #f))))
;; CONDITION VARIABLES
;; These functions are all pass-thrus to the existing Guile implementations.
- [Guile-commits] 10/24: Remove thread-local weak mutex set, (continued)
- [Guile-commits] 10/24: Remove thread-local weak mutex set, Andy Wingo, 2016/11/06
- [Guile-commits] 18/24: Back to simple unlock-mutex, Andy Wingo, 2016/11/06
- [Guile-commits] 08/24: Remove lock-mutex owner facility, Andy Wingo, 2016/11/06
- [Guile-commits] 14/24: SRFI-18 mutexes are not recursive, Andy Wingo, 2016/11/06
- [Guile-commits] 07/24: SRFI-18 threads disjoint from guile threads, Andy Wingo, 2016/11/06
- [Guile-commits] 21/24: scm_timed_lock_mutex replaces scm_lock_mutex_timed, Andy Wingo, 2016/11/06
- [Guile-commits] 15/24: Recursively locking a SRFI-18 mutex blocks, Andy Wingo, 2016/11/06
- [Guile-commits] 19/24: Separate fat mutex unlock and wait operations, Andy Wingo, 2016/11/06
- [Guile-commits] 06/24: Update SRFI-18 documentation., Andy Wingo, 2016/11/06
- [Guile-commits] 11/24: Remove thread held pthread_mutex field, Andy Wingo, 2016/11/06
- [Guile-commits] 13/24: Move more functionality to SRFI-18 mutex-unlock!,
Andy Wingo <=
- [Guile-commits] 03/24: SRFI-18 mutexes disjoint from Guile mutexes, Andy Wingo, 2016/11/06
- [Guile-commits] 16/24: Remove unchecked-unlock facility from Guile mutexes, Andy Wingo, 2016/11/06
- [Guile-commits] 24/24: Update NEWS., Andy Wingo, 2016/11/06
- [Guile-commits] 22/24: Update documentation on mutexes, Andy Wingo, 2016/11/06
- [Guile-commits] 20/24: Update mutex documentation, Andy Wingo, 2016/11/06
- [Guile-commits] 17/24: Replace scm_make_mutex_with_flags, Andy Wingo, 2016/11/06
- [Guile-commits] 23/24: Minor editing in api-scheduling.texi, Andy Wingo, 2016/11/06