Ver código fonte

fix bug in ReadWriteLock

Kolja Strohm 1 semana atrás
pai
commit
9d1d14f20f
2 arquivos alterados com 4 adições e 2 exclusões
  1. 2 0
      Critical.cpp
  2. 2 2
      Screen.cpp

+ 2 - 0
Critical.cpp

@@ -283,6 +283,7 @@ void Framework::ReadWriteLock::lockRead()
         }
         index = readerThreadCount++;
         readerThreads[index] = currentThreadId;
+        readCounters[index] = 0;
     }
     readCounters[index]++;
     cs.unlock();
@@ -401,6 +402,7 @@ bool Framework::ReadWriteLock::tryLockRead()
         }
         index = readerThreadCount++;
         readerThreads[index] = currentThreadId;
+        readCounters[index] = 0;
     }
     readCounters[index]++;
     cs.unlock();

+ 2 - 2
Screen.cpp

@@ -550,8 +550,8 @@ void Screen3D::doMouseEvent(MouseEvent& me) // sends mouse event
     }
     else
     {
-        rwLock.lockRead();
         __super::doMouseEvent(me);
+        rwLock.lockRead();
         for (int i = kameras->getEntryCount() - 1; i >= 0; i--)
             kameras->z(i)->doMouseEvent(me);
         rwLock.unlockRead();
@@ -568,8 +568,8 @@ void Screen3D::doKeyboardEvent(KeyboardEvent& te) // sends keyboard event
     }
     else
     {
-        rwLock.lockRead();
         __super::doKeyboardEvent(te);
+        rwLock.lockRead();
         for (int i = kameras->getEntryCount() - 1; i >= 0; i--)
             kameras->z(i)->doKeyboardEvent(te);
         rwLock.unlockRead();