[vmkit-commits] [vmkit] r73226 - /vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Fri Jun 12 06:53:54 PDT 2009


Author: geoffray
Date: Fri Jun 12 08:53:44 2009
New Revision: 73226

URL: http://llvm.org/viewvc/llvm-project?rev=73226&view=rev
Log:
Add a couple more of asserts, and do a while around the wait call.


Modified:
    vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp?rev=73226&r1=73225&r2=73226&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaObject.cpp Fri Jun 12 08:53:44 2009
@@ -29,6 +29,7 @@
   // such as LockRecursive), we have to change the VT of this object.
   res->setVirtualTable(&VT);
 #endif
+  assert(!res->firstThread && "Error in constructor");
   return res;
 }
 
@@ -47,12 +48,16 @@
     } else { 
       thread->state = JavaThread::StateWaiting;
       if (l->firstThread) {
-        l->firstThread->prevWaiting->nextWaiting = thread;
+        assert(l->firstThread->prevWaiting && l->firstThread->nextWaiting &&
+               "Inconsistent list");
+        if (l->firstThread->nextWaiting == l->firstThread) {
+          l->firstThread->nextWaiting = thread;
+        } else {
+          l->firstThread->prevWaiting->nextWaiting = thread;
+        } 
         thread->prevWaiting = l->firstThread->prevWaiting;
         thread->nextWaiting = l->firstThread;
         l->firstThread->prevWaiting = thread;
-        if (l->firstThread->nextWaiting == l->firstThread) 
-          l->firstThread->nextWaiting = thread;
       } else {
         l->firstThread = thread;
         thread->nextWaiting = thread;
@@ -64,20 +69,24 @@
       
       bool timeout = false;
 
-      if (!thread->interruptFlag) {
+      while (!thread->interruptFlag && thread->nextWaiting) {
         if (timed) {
           timeout = varcondThread.timedWait(&l->lock, info);
+          if (timeout) break;
         } else {
           varcondThread.wait(&l->lock);
         }
       }
-
-
+     
+      assert((!l->firstThread || (l->firstThread->prevWaiting && 
+             l->firstThread->nextWaiting)) && "Inconsistent list");
+ 
       bool interrupted = (thread->interruptFlag != 0);
 
       if (interrupted || timeout) {
         
         if (thread->nextWaiting) {
+          assert(thread->prevWaiting && "Inconsistent list");
           if (l->firstThread != thread) {
             thread->nextWaiting->prevWaiting = thread->prevWaiting;
             thread->prevWaiting->nextWaiting = thread->nextWaiting;
@@ -99,6 +108,9 @@
           // Notify lost, notify someone else.
           notify();
         }
+      } else {
+        assert(!thread->prevWaiting && !thread->nextWaiting &&
+               "Inconsistent state");
       }
       
       thread->state = JavaThread::StateRunning;





More information about the vmkit-commits mailing list