mirror of
https://github.com/SerenityOS/serenity
synced 2024-10-15 20:33:10 +00:00
7826729ab2
When we lock a mutex, eventually `Thread::block` is invoked which could in turn invoke `Process::big_lock().restore_exclusive_lock()`. This would then try to add the current thread to a different blocked thread list then the one in use for the original mutex being locked, and because it's an intrusive list, the thread is removed from its original list during the `.append()`. When the original mutex eventually unblocks, we no longer have the thread in the intrusive blocked threads list and we panic. Solve this by making the big lock mutex special and giving it its own blocked thread list. Because the process big lock is temporary and is being actively removed from e.g. syscalls, it's a matter of time before we can also remove the fix introduced by this commit. Fixes issue #9401. |
||
---|---|---|
.. | ||
LockLocation.h | ||
LockMode.h | ||
LockRank.cpp | ||
LockRank.h | ||
Mutex.cpp | ||
Mutex.h | ||
MutexProtected.h | ||
Spinlock.h | ||
SpinlockProtected.h |