Преглед на файлове

Kernel: Fix bad assertion in Lock::unlock_if_locked()

We shouldn't assert if you call this on a Lock held by another Thread
in the same Process. Instead, we should just not unlock.
Andreas Kling преди 5 години
родител
ревизия
b35ad5b523
променени са 1 файла, в които са добавени 4 реда и са изтрити 2 реда
  1. 4 2
      Kernel/Lock.cpp

+ 4 - 2
Kernel/Lock.cpp

@@ -49,11 +49,13 @@ bool Lock::unlock_if_locked()
     for (;;) {
         if (CAS(&m_lock, 1, 0) == 0) {
             if (m_level == 0) {
-                memory_barrier();
                 m_lock = 0;
                 return false;
             }
-            ASSERT(m_holder == current);
+            if (m_holder != current) {
+                m_lock = 0;
+                return false;
+            }
             ASSERT(m_level);
             --m_level;
             if (m_level) {