[vmkit-commits] [vmkit] r117223 - /vmkit/branches/precise/lib/Mvm/CommonThread/ObjectLocks.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Sun Oct 24 04:28:00 PDT 2010
Author: geoffray
Date: Sun Oct 24 06:27:59 2010
New Revision: 117223
URL: http://llvm.org/viewvc/llvm-project?rev=117223&view=rev
Log:
Code cleanup. No functionality change.
Modified:
vmkit/branches/precise/lib/Mvm/CommonThread/ObjectLocks.cpp
Modified: vmkit/branches/precise/lib/Mvm/CommonThread/ObjectLocks.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/precise/lib/Mvm/CommonThread/ObjectLocks.cpp?rev=117223&r1=117222&r2=117223&view=diff
==============================================================================
--- vmkit/branches/precise/lib/Mvm/CommonThread/ObjectLocks.cpp (original)
+++ vmkit/branches/precise/lib/Mvm/CommonThread/ObjectLocks.cpp Sun Oct 24 06:27:59 2010
@@ -332,97 +332,96 @@
bool LockingThread::wait(
gc* self, LockSystem& table, struct timeval* info, bool timed) {
llvm_gcroot(self, 0);
- FatLock* l = 0;
-
assert(mvm::ThinLock::owner(self, table));
- l = mvm::ThinLock::changeToFatlock(self, table);
- this->waitsOn = l;
- mvm::Cond& varcondThread = this->varcond;
-
- if (this->interruptFlag != 0) {
- this->interruptFlag = 0;
- this->waitsOn = 0;
- return true;
- } else {
- this->state = LockingThread::StateWaiting;
- if (l->firstThread) {
- assert(l->firstThread->prevWaiting && l->firstThread->nextWaiting &&
- "Inconsistent list");
- if (l->firstThread->nextWaiting == l->firstThread) {
- l->firstThread->nextWaiting = this;
- } else {
- l->firstThread->prevWaiting->nextWaiting = this;
- }
- this->prevWaiting = l->firstThread->prevWaiting;
- this->nextWaiting = l->firstThread;
- l->firstThread->prevWaiting = this;
- } else {
- l->firstThread = this;
- this->nextWaiting = this;
- this->prevWaiting = this;
- }
- assert(this->prevWaiting && this->nextWaiting && "Inconsistent list");
- assert(l->firstThread->prevWaiting && l->firstThread->nextWaiting &&
- "Inconsistent list");
+
+ FatLock* l = mvm::ThinLock::changeToFatlock(self, table);
+ this->waitsOn = l;
+ mvm::Cond& varcondThread = this->varcond;
+
+ if (this->interruptFlag != 0) {
+ this->interruptFlag = 0;
+ this->waitsOn = 0;
+ return true;
+ }
+
+ this->state = LockingThread::StateWaiting;
+ if (l->firstThread) {
+ assert(l->firstThread->prevWaiting && l->firstThread->nextWaiting &&
+ "Inconsistent list");
+ if (l->firstThread->nextWaiting == l->firstThread) {
+ l->firstThread->nextWaiting = this;
+ } else {
+ l->firstThread->prevWaiting->nextWaiting = this;
+ }
+ this->prevWaiting = l->firstThread->prevWaiting;
+ this->nextWaiting = l->firstThread;
+ l->firstThread->prevWaiting = this;
+ } else {
+ l->firstThread = this;
+ this->nextWaiting = this;
+ this->prevWaiting = this;
+ }
+
+ assert(this->prevWaiting && this->nextWaiting && "Inconsistent list");
+ assert(l->firstThread->prevWaiting && l->firstThread->nextWaiting &&
+ "Inconsistent list");
- bool timeout = false;
+ bool timeout = false;
- l->waitingThreads++;
+ l->waitingThreads++;
- while (!this->interruptFlag && this->nextWaiting) {
- if (timed) {
- timeout = varcondThread.timedWait(&l->internalLock, info);
- if (timeout) break;
- } else {
- varcondThread.wait(&l->internalLock);
- }
- }
+ while (!this->interruptFlag && this->nextWaiting) {
+ if (timed) {
+ timeout = varcondThread.timedWait(&l->internalLock, info);
+ if (timeout) break;
+ } else {
+ varcondThread.wait(&l->internalLock);
+ }
+ }
- l->waitingThreads--;
+ l->waitingThreads--;
- assert((!l->firstThread || (l->firstThread->prevWaiting &&
- l->firstThread->nextWaiting)) && "Inconsistent list");
+ assert((!l->firstThread || (l->firstThread->prevWaiting &&
+ l->firstThread->nextWaiting)) && "Inconsistent list");
- bool interrupted = (this->interruptFlag != 0);
+ bool interrupted = (this->interruptFlag != 0);
- if (interrupted || timeout) {
-
- if (this->nextWaiting) {
- assert(this->prevWaiting && "Inconsistent list");
- if (l->firstThread != this) {
- this->nextWaiting->prevWaiting = this->prevWaiting;
- this->prevWaiting->nextWaiting = this->nextWaiting;
- assert(l->firstThread->prevWaiting &&
- l->firstThread->nextWaiting && "Inconsistent list");
- } else if (this->nextWaiting == this) {
- l->firstThread = NULL;
- } else {
- l->firstThread = this->nextWaiting;
- l->firstThread->prevWaiting = this->prevWaiting;
- this->prevWaiting->nextWaiting = l->firstThread;
- assert(l->firstThread->prevWaiting &&
- l->firstThread->nextWaiting && "Inconsistent list");
- }
- this->nextWaiting = NULL;
- this->prevWaiting = NULL;
- } else {
- assert(!this->prevWaiting && "Inconstitent state");
- // Notify lost, notify someone else.
- notify(self, table);
- }
+ if (interrupted || timeout) {
+ if (this->nextWaiting) {
+ assert(this->prevWaiting && "Inconsistent list");
+ if (l->firstThread != this) {
+ this->nextWaiting->prevWaiting = this->prevWaiting;
+ this->prevWaiting->nextWaiting = this->nextWaiting;
+ assert(l->firstThread->prevWaiting &&
+ l->firstThread->nextWaiting && "Inconsistent list");
+ } else if (this->nextWaiting == this) {
+ l->firstThread = NULL;
} else {
- assert(!this->prevWaiting && !this->nextWaiting &&
- "Inconsistent state");
- }
+ l->firstThread = this->nextWaiting;
+ l->firstThread->prevWaiting = this->prevWaiting;
+ this->prevWaiting->nextWaiting = l->firstThread;
+ assert(l->firstThread->prevWaiting &&
+ l->firstThread->nextWaiting && "Inconsistent list");
+ }
+ this->nextWaiting = NULL;
+ this->prevWaiting = NULL;
+ } else {
+ assert(!this->prevWaiting && "Inconstitent state");
+ // Notify lost, notify someone else.
+ notify(self, table);
+ }
+ } else {
+ assert(!this->prevWaiting && !this->nextWaiting &&
+ "Inconsistent state");
+ }
- this->state = LockingThread::StateRunning;
- this->waitsOn = 0;
+ this->state = LockingThread::StateRunning;
+ this->waitsOn = NULL;
- if (interrupted) {
- this->interruptFlag = 0;
- return true;
- }
- }
+ if (interrupted) {
+ this->interruptFlag = 0;
+ return true;
+ }
assert(mvm::ThinLock::owner(self, table) && "Not owner after wait");
return false;
@@ -432,37 +431,37 @@
llvm_gcroot(self, 0);
assert(mvm::ThinLock::owner(self, table));
FatLock* l = mvm::ThinLock::getFatLock(self, table);
- if (l) {
- LockingThread* cur = l->firstThread;
- if (cur) {
- do {
- if (cur->interruptFlag != 0) {
- cur = cur->nextWaiting;
- } else {
- assert(cur->prevWaiting && cur->nextWaiting &&
- "Inconsistent list");
- if (cur != l->firstThread) {
- cur->prevWaiting->nextWaiting = cur->nextWaiting;
- cur->nextWaiting->prevWaiting = cur->prevWaiting;
- assert(l->firstThread->prevWaiting &&
- l->firstThread->nextWaiting && "Inconsistent list");
- } else if (cur->nextWaiting == cur) {
- l->firstThread = 0;
- } else {
- l->firstThread = cur->nextWaiting;
- l->firstThread->prevWaiting = cur->prevWaiting;
- cur->prevWaiting->nextWaiting = l->firstThread;
- assert(l->firstThread->prevWaiting &&
- l->firstThread->nextWaiting && "Inconsistent list");
- }
- cur->prevWaiting = 0;
- cur->nextWaiting = 0;
- cur->varcond.signal();
- break;
- }
- } while (cur != l->firstThread);
- }
+
+ if (l == NULL) return;
+ LockingThread* cur = l->firstThread;
+ if (cur == NULL) return;
+
+ do {
+ if (cur->interruptFlag != 0) {
+ cur = cur->nextWaiting;
+ } else {
+ assert(cur->prevWaiting && cur->nextWaiting &&
+ "Inconsistent list");
+ if (cur != l->firstThread) {
+ cur->prevWaiting->nextWaiting = cur->nextWaiting;
+ cur->nextWaiting->prevWaiting = cur->prevWaiting;
+ assert(l->firstThread->prevWaiting &&
+ l->firstThread->nextWaiting && "Inconsistent list");
+ } else if (cur->nextWaiting == cur) {
+ l->firstThread = NULL;
+ } else {
+ l->firstThread = cur->nextWaiting;
+ l->firstThread->prevWaiting = cur->prevWaiting;
+ cur->prevWaiting->nextWaiting = l->firstThread;
+ assert(l->firstThread->prevWaiting &&
+ l->firstThread->nextWaiting && "Inconsistent list");
+ }
+ cur->prevWaiting = NULL;
+ cur->nextWaiting = NULL;
+ cur->varcond.signal();
+ break;
}
+ } while (cur != l->firstThread);
assert(mvm::ThinLock::owner(self, table) && "Not owner after notify");
}
@@ -471,19 +470,16 @@
llvm_gcroot(self, 0);
assert(mvm::ThinLock::owner(self, table));
FatLock* l = mvm::ThinLock::getFatLock(self, table);
- if (l) {
- LockingThread* cur = l->firstThread;
- if (cur) {
- do {
- LockingThread* temp = cur->nextWaiting;
- cur->prevWaiting = 0;
- cur->nextWaiting = 0;
- cur->varcond.signal();
- cur = temp;
- } while (cur != l->firstThread);
- l->firstThread = 0;
- }
- }
-
+ if (l == NULL) return;
+ LockingThread* cur = l->firstThread;
+ if (cur == NULL) return;
+ do {
+ LockingThread* temp = cur->nextWaiting;
+ cur->prevWaiting = NULL;
+ cur->nextWaiting = NULL;
+ cur->varcond.signal();
+ cur = temp;
+ } while (cur != l->firstThread);
+ l->firstThread = NULL;
assert(mvm::ThinLock::owner(self, table) && "Not owner after notifyAll");
}
More information about the vmkit-commits
mailing list