mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-11 01:06:01 +03:00
Kernel: Fix LOCK_DEBUG feature to work again
- UBSAN detected cases where we were calling thread->holding_lock(..) but current_thread was nullptr. - Fix Lock::force_unlock_if_locked to not pass the correct ref delta to holding_lock(..).
This commit is contained in:
parent
35c0a6c54d
commit
7481789eac
Notes:
sideshowbarker
2024-07-18 19:07:58 +09:00
Author: https://github.com/bgianfo Commit: https://github.com/SerenityOS/serenity/commit/7481789eace Pull-request: https://github.com/SerenityOS/serenity/pull/6601
@ -53,7 +53,9 @@ void Lock::lock(Mode mode)
|
||||
VERIFY(m_times_locked == 0);
|
||||
m_times_locked++;
|
||||
#if LOCK_DEBUG
|
||||
current_thread->holding_lock(*this, 1, file, line);
|
||||
if (current_thread) {
|
||||
current_thread->holding_lock(*this, 1, file, line);
|
||||
}
|
||||
#endif
|
||||
m_queue.should_block(true);
|
||||
m_lock.store(false, AK::memory_order_release);
|
||||
@ -165,7 +167,9 @@ void Lock::unlock()
|
||||
}
|
||||
|
||||
#if LOCK_DEBUG
|
||||
current_thread->holding_lock(*this, -1);
|
||||
if (current_thread) {
|
||||
current_thread->holding_lock(*this, -1);
|
||||
}
|
||||
#endif
|
||||
|
||||
m_lock.store(false, AK::memory_order_release);
|
||||
@ -201,7 +205,7 @@ auto Lock::force_unlock_if_locked(u32& lock_count_to_restore) -> Mode
|
||||
|
||||
dbgln_if(LOCK_RESTORE_DEBUG, "Lock::force_unlock_if_locked @ {}: unlocking exclusive with lock count: {}", this, m_times_locked);
|
||||
#if LOCK_DEBUG
|
||||
m_holder->holding_lock(*this, -(int)lock_count_to_restore);
|
||||
m_holder->holding_lock(*this, -(int)m_times_locked);
|
||||
#endif
|
||||
m_holder = nullptr;
|
||||
VERIFY(m_times_locked > 0);
|
||||
|
Loading…
Reference in New Issue
Block a user