Ver código fonte

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 anos atrás
pai
commit
b35ad5b523
1 arquivos alterados com 4 adições e 2 exclusões
  1. 4 2
      Kernel/Lock.cpp

+ 4 - 2
Kernel/Lock.cpp

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