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()