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