diff --git a/repos/base/src/lib/base/lock.cc b/repos/base/src/lib/base/lock.cc index 447062ee7e..b358496304 100644 --- a/repos/base/src/lib/base/lock.cc +++ b/repos/base/src/lib/base/lock.cc @@ -146,12 +146,16 @@ void Cancelable_lock::unlock() /* transfer lock ownership to next applicant and wake him up */ _owner = *next_owner; + + /* make copy since _owner may change outside spinlock ! */ + Applicant owner = *next_owner; + if (_last_applicant == next_owner) _last_applicant = &_owner; spinlock_unlock(&_spinlock_state); - _owner.wake_up(); + owner.wake_up(); } else {