[vmkit-commits] [vmkit] r83836 - in /vmkit/trunk/lib/N3/VMCore: N3Initialise.cpp VMObject.cpp VMObject.h VirtualTables.cpp

Gael Thomas gael.thomas at lip6.fr
Mon Oct 12 02:13:50 PDT 2009


Author: gthomas
Date: Mon Oct 12 04:13:50 2009
New Revision: 83836

URL: http://llvm.org/viewvc/llvm-project?rev=83836&view=rev
Log:
Put VMCond inside a LockObj (it is not allocated with the gc).
Only applicative objects are now allocated with the gc (arrays, LockObj and VMObject).


Modified:
    vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp
    vmkit/trunk/lib/N3/VMCore/VMObject.cpp
    vmkit/trunk/lib/N3/VMCore/VMObject.h
    vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp

Modified: vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp?rev=83836&r1=83835&r2=83836&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/N3Initialise.cpp Mon Oct 12 04:13:50 2009
@@ -173,9 +173,7 @@
 	}
 #endif
   
-  INIT(VMCond);
   INIT(LockObj);
-
   INIT(VMObject);
   INIT(VMArray);
   INIT(ArrayUInt8);

Modified: vmkit/trunk/lib/N3/VMCore/VMObject.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/VMObject.cpp?rev=83836&r1=83835&r2=83836&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/VMObject.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/VMObject.cpp Mon Oct 12 04:13:50 2009
@@ -23,10 +23,6 @@
   this->lockObj = 0;
 }
 
-VMCond* VMCond::allocate() {
-  return gc_new(VMCond)();
-}
-
 void VMCond::notify() {
   for (std::vector<VMThread*>::iterator i = threads.begin(), 
             e = threads.end(); i!= e; ++i) {
@@ -77,21 +73,19 @@
 
 LockObj* LockObj::allocate() {
   LockObj* res = gc_new(LockObj)();
-  res->lock = new mvm::LockRecursive();
-  res->varcond = VMCond::allocate();
   return res;
 }
 
 void LockObj::aquire() {
-  lock->lock();
+  lock.lock();
 }
 
 void LockObj::release() {
-  lock->unlock();
+  lock.unlock();
 }
 
 bool LockObj::owner() {
-  return lock->selfOwner();
+  return lock.selfOwner();
 }
 
 void VMObject::print(mvm::PrintBuffer* buf) const {
@@ -142,10 +136,10 @@
       thread->interruptFlag = 0;
       thread->vm->interruptedException(this);
     } else {
-      unsigned int recur = l->lock->recursionCount();
+      unsigned int recur = l->lock.recursionCount();
       bool timeout = false;
-      l->lock->unlockAll();
-      l->varcond->wait(thread);
+      l->lock.unlockAll();
+      l->varcond.wait(thread);
       thread->state = VMThread::StateWaiting;
 
       if (timed) {
@@ -156,10 +150,10 @@
 
       bool interrupted = (thread->interruptFlag != 0);
       mutexThread->unlock();
-      l->lock->lockAll(recur);
+      l->lock.lockAll(recur);
 
       if (interrupted || timeout) {
-        l->varcond->remove(thread);
+        l->varcond.remove(thread);
       }
 
       thread->state = VMThread::StateRunning;
@@ -185,7 +179,7 @@
 void VMObject::notify() {
   LockObj* l = myLock(this);
   if (l->owner()) {
-    l->varcond->notify();
+    l->varcond.notify();
   } else {
     VMThread::get()->vm->illegalMonitorStateException(this);
   }
@@ -194,7 +188,7 @@
 void VMObject::notifyAll() {
   LockObj* l = myLock(this);
   if (l->owner()) {
-    l->varcond->notifyAll();
+    l->varcond.notifyAll();
   } else {
     VMThread::get()->vm->illegalMonitorStateException(this);
   } 

Modified: vmkit/trunk/lib/N3/VMCore/VMObject.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/VMObject.h?rev=83836&r1=83835&r2=83836&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/VMObject.h (original)
+++ vmkit/trunk/lib/N3/VMCore/VMObject.h Mon Oct 12 04:13:50 2009
@@ -28,27 +28,21 @@
 class VMObject;
 class VMThread;
 
-class VMCond : public mvm::Object {
+class VMCond {
 public:
-  static VirtualTable* VT;
   std::vector<VMThread*> threads;
   
-  static VMCond* allocate();
-
   void notify();
   void notifyAll();
   void wait(VMThread* th);
   void remove(VMThread* th);
-
-  virtual void TRACER;
 };
 
-
 class LockObj : public mvm::Object {
 public:
   static VirtualTable* VT;
-  mvm::LockRecursive *lock;
-  VMCond* varcond;
+  mvm::LockRecursive   lock;
+  VMCond               varcond;
 
   virtual void print(mvm::PrintBuffer* buf) const;
   virtual void TRACER;

Modified: vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp?rev=83836&r1=83835&r2=83836&view=diff

==============================================================================
--- vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp (original)
+++ vmkit/trunk/lib/N3/VMCore/VirtualTables.cpp Mon Oct 12 04:13:50 2009
@@ -36,10 +36,8 @@
   INIT(ArrayFloat);
   INIT(ArrayDouble);
   INIT(ArrayObject);
-  INIT(VMCond);
   INIT(LockObj);
   INIT(VMObject);
-  INIT(ThreadSystem);
   INIT(CLIString);
   
 #undef INIT
@@ -49,9 +47,6 @@
   compilingClass->CALL_TRACER;
 }
 
-void ThreadSystem::TRACER {
-}
-
 void CacheNode::TRACER {
   ((mvm::Object*)methPtr)->MARK_AND_TRACE;
   lastCible->CALL_TRACER;
@@ -106,6 +101,16 @@
     (*i)->CALL_TRACER; }}
 
 
+// root of tracing
+void VMThread::TRACER {
+  vmThread->MARK_AND_TRACE;
+  vm->CALL_TRACER;
+  //lock->MARK_AND_TRACE;
+  //varcond->MARK_AND_TRACE;
+  pendingException->MARK_AND_TRACE;
+}
+
+
 void VMCommonClass::TRACER {
   super->CALL_TRACER;
   CALL_TRACER_VECTOR(VMClass*, interfaces, std::allocator);
@@ -166,16 +171,7 @@
   classDef->CALL_TRACER;
 }
 
-void VMCond::TRACER {
-  for (std::vector<VMThread*, std::allocator<VMThread*> >::iterator i = threads.begin(), e = threads.end();
-       i!= e; ++i) {
-    (*i)->CALL_TRACER; 
-  }
-}
-
 void LockObj::TRACER {
-  //lock->MARK_AND_TRACE;
-  varcond->MARK_AND_TRACE;
 }
 
 void VMObject::TRACER {
@@ -183,14 +179,6 @@
   lockObj->MARK_AND_TRACE;
 }
 
-void VMThread::TRACER {
-  vmThread->MARK_AND_TRACE;
-  vm->CALL_TRACER;
-  //lock->MARK_AND_TRACE;
-  //varcond->MARK_AND_TRACE;
-  pendingException->MARK_AND_TRACE;
-}
-
 void Param::TRACER {
   method->CALL_TRACER;
 }
@@ -212,7 +200,6 @@
 }
 
 void N3::TRACER {
-  threadSystem->MARK_AND_TRACE;
   functions->CALL_TRACER;
   if (bootstrapThread) {
     bootstrapThread->CALL_TRACER;





More information about the vmkit-commits mailing list