Remove support for recursion in WITH-THREAD-MUTEX-LOCKED.
authorTaylor R Campbell <campbell@mumble.net>
Sun, 16 Nov 2014 18:52:58 +0000 (18:52 +0000)
committerTaylor R Campbell <campbell@mumble.net>
Sun, 16 Nov 2014 18:52:58 +0000 (18:52 +0000)
src/runtime/thread.scm

index b517141484a7ee327ac6ed73cd6743d9e29d2b47..c9c766ffd78339ff9f18f29e5fcd096aab8cb65e 100644 (file)
@@ -1104,41 +1104,15 @@ USA.
 
 (define (with-thread-mutex-locked mutex thunk)
   (guarantee-thread-mutex mutex 'WITH-THREAD-MUTEX-LOCKED)
-  (let ((thread (current-thread))
-       (grabbed-lock?))
-    (dynamic-wind
-     (lambda ()
-       (let ((owner (thread-mutex/owner mutex)))
-        (if (eq? owner thread)
-            (begin
-              (set! grabbed-lock? #f)
-              unspecific)
-            (begin
-              (set! grabbed-lock? #t)
-              (%lock-thread-mutex mutex thread owner)))))
-     thunk
-     (lambda ()
-       (if (and grabbed-lock? (eq? (thread-mutex/owner mutex) thread))
-          (%unlock-thread-mutex mutex thread))))))
+  (dynamic-wind (lambda () (lock-thread-mutex mutex))
+               thunk
+               (lambda () (unlock-thread-mutex mutex))))
 
 (define (with-thread-mutex-unlocked mutex thunk)
   (guarantee-thread-mutex mutex 'WITH-THREAD-MUTEX-UNLOCKED)
-  (let ((thread (current-thread))
-       (released-lock?))
-    (dynamic-wind
-     (lambda ()
-       (let ((owner (thread-mutex/owner mutex)))
-        (if (not (eq? owner thread))
-            (set! released-lock? #f)
-            (begin
-              (set! released-lock? #t)
-              (%unlock-thread-mutex mutex owner)))))
-     thunk
-     (lambda ()
-       (if released-lock?
-          (let ((owner (thread-mutex/owner mutex)))
-            (if (not (eq? owner thread))
-                (%lock-thread-mutex mutex thread owner))))))))
+  (dynamic-wind (lambda () (unlock-thread-mutex mutex))
+               thunk
+               (lambda () (lock-thread-mutex mutex))))
 
 (define (%disassociate-thread-mutexes thread)
   (do ((mutexes (thread/mutexes thread) (cdr mutexes)))