Преглед изворни кода

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