[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