From 6b0cd78c721f9f66d50713f0e723a4298ca8e058 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Henrik=20Grubbstr=C3=B6m=20=28Grubba=29?=
 <grubba@grubba.org>
Date: Sun, 5 Aug 2018 11:21:52 +0200
Subject: [PATCH] Thread.ResourceCount: Fixed mutex handling.

---
 lib/modules/Thread.pmod | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/lib/modules/Thread.pmod b/lib/modules/Thread.pmod
index edb4c23ccc..3ac0a73cec 100644
--- a/lib/modules/Thread.pmod
+++ b/lib/modules/Thread.pmod
@@ -876,8 +876,8 @@ optional class ResourceCountKey {
   }
 
   /*semi*/private void destroy() {
+    MutexKey key = parent->_mutex->lock();
     --parent->_count;
-    MutexKey lock = parent->_mutex->lock();
     parent->_cond->signal();
   }
 }
@@ -906,15 +906,17 @@ optional class ResourceCount {
   //!
   //! @param level
   //!   The maximum level that is considered drained.
-  variant /*semi*/final void wait_till_drained(void|int level) {
+  /*semi*/final void wait_till_drained(void|int level) {
+    MutexKey key = _mutex->lock();
     while (_count > level)		// Recheck before allowing further
-      _cond->wait(_mutex->lock());
+      _cond->wait(key);
   }
 
   //! Increments the resource-counter.
   //! @returns
   //!   A @[ResourceCountKey] to decrement the resource-counter again.
   /*semi*/final ResourceCountKey acquire() {
+    MutexKey key = _mutex->lock();
     _count++;
     return ResourceCountKey(this);
   }
-- 
GitLab