From accda1211bc4e5a7ad8fdad8d8aeeadf407d7877 Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Tue, 25 Feb 2020 08:56:26 +0100 Subject: [PATCH] mutex: reinit Applicant state in Mutex::acquire() The applicant_to_wake_up() member must be initialized to 0 to keep the same semantic as before the change by "base: add mutex as derivate of lock" Issue #3662 --- repos/base/src/lib/base/mutex.cc | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/repos/base/src/lib/base/mutex.cc b/repos/base/src/lib/base/mutex.cc index f7a8c2315e..3c82e9de9e 100644 --- a/repos/base/src/lib/base/mutex.cc +++ b/repos/base/src/lib/base/mutex.cc @@ -17,16 +17,17 @@ void Genode::Mutex::acquire() { - Lock::Applicant myself(Thread::myself()); - if (_lock.lock_owner(myself)) - Genode::error("deadlock ahead, mutex=", this, ", return ip=", - __builtin_return_address(0)); - - while (1) + while (1) { try { + Lock::Applicant myself(Thread::myself()); + if (_lock.lock_owner(myself)) + Genode::error("deadlock ahead, mutex=", this, ", return ip=", + __builtin_return_address(0)); + _lock.Cancelable_lock::lock(myself); return; } catch (Blocking_canceled) { } + } } void Genode::Mutex::release()