[vmkit-commits] [vmkit] r121065 - in /vmkit/branches/multi-vm: include/mvm/VirtualMachine.h lib/J3/VMCore/Jnjvm.cpp lib/J3/VMCore/Jnjvm.h lib/J3/VMCore/ReferenceQueue.cpp lib/J3/VMCore/ReferenceQueue.h lib/Mvm/Runtime/SystemThreads.cpp

Gael Thomas gael.thomas at lip6.fr
Mon Dec 6 15:30:15 PST 2010


Author: gthomas
Date: Mon Dec  6 17:30:14 2010
New Revision: 121065

URL: http://llvm.org/viewvc/llvm-project?rev=121065&view=rev
Log:
remove java specific functions from ReferenceThread

Modified:
    vmkit/branches/multi-vm/include/mvm/VirtualMachine.h
    vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.cpp
    vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.h
    vmkit/branches/multi-vm/lib/J3/VMCore/ReferenceQueue.cpp
    vmkit/branches/multi-vm/lib/J3/VMCore/ReferenceQueue.h
    vmkit/branches/multi-vm/lib/Mvm/Runtime/SystemThreads.cpp

Modified: vmkit/branches/multi-vm/include/mvm/VirtualMachine.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/include/mvm/VirtualMachine.h?rev=121065&r1=121064&r2=121065&view=diff
==============================================================================
--- vmkit/branches/multi-vm/include/mvm/VirtualMachine.h (original)
+++ vmkit/branches/multi-vm/include/mvm/VirtualMachine.h Mon Dec  6 17:30:14 2010
@@ -55,10 +55,6 @@
 //===----------------------------------------------------------------------===//
 // (2) GC-related methods.
 //===----------------------------------------------------------------------===//
-  /// finalizeObject - invoke the finalizer of a java object
-  ///
-	virtual void finalizeObject(mvm::gc* obj) {}
-
   /// startCollection - Preliminary code before starting a GC.
   ///
   virtual void startCollection() {}
@@ -66,6 +62,24 @@
   /// endCollection - Code after running a GC.
   ///
   virtual void endCollection() {}
+
+  /// finalizeObject - invoke the finalizer of a java object
+  ///
+	virtual void finalizeObject(mvm::gc* obj) {}
+
+  /// getReferentPtr - return the referent of a reference
+  ///
+	virtual mvm::gc** getReferent(mvm::gc* ref) { abort(); }
+
+  /// setReferentPtr - set the referent of a reference
+  ///
+	virtual void setReferent(mvm::gc* ref, mvm::gc* val) { abort(); }
+
+  /// enqueueReference - enqueue the reference
+  ///
+	virtual bool enqueueReference(mvm::gc* _obj) { abort(); }
+
+
   
   /// scanWeakReferencesQueue - Scan all weak references. Called by the GC
   /// before scanning the finalization queue.

Modified: vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.cpp?rev=121065&r1=121064&r2=121065&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.cpp (original)
+++ vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.cpp Mon Dec  6 17:30:14 2010
@@ -1076,7 +1076,7 @@
   llvm_gcroot(javaLoader, 0);
   JnjvmClassLoader* loader = bootstrapLoader;
   
-  referenceThread = new ReferenceThread(this);
+  referenceThread = new ReferenceThread(vmkit);
 	javaReferenceThread = new JavaThread(this, referenceThread);
 	referenceThread->allVmsData[vmID] = javaReferenceThread;
 	referenceThread->attach(this);
@@ -1406,6 +1406,29 @@
   meth->invokeIntVirtualBuf(this, cl, obj, 0);
 }
 
+mvm::gc** Jnjvm::getReferent(mvm::gc* _obj) {
+  llvm_gcroot(_obj, 0);
+  JavaObjectReference* obj = (JavaObjectReference*)_obj;
+  llvm_gcroot(obj, 0);
+  return (mvm::gc**)JavaObjectReference::getReferentPtr(obj);
+}
+
+void Jnjvm::setReferent(mvm::gc* _obj, mvm::gc* val) {
+  llvm_gcroot(_obj, 0);
+  JavaObjectReference* obj = (JavaObjectReference*)_obj;
+  llvm_gcroot(obj, 0);
+  llvm_gcroot(val, 0);
+  JavaObjectReference::setReferent(obj, (JavaObject*)val);
+}
+
+bool Jnjvm::enqueueReference(mvm::gc* _obj) {
+  JavaObject* obj = (JavaObject*)_obj;
+  llvm_gcroot(obj, 0);
+  JavaMethod* meth = upcalls->EnqueueReference;
+  UserClass* cl = JavaObject::getClass(obj)->asClass();
+  return (bool)meth->invokeIntSpecialBuf(this, cl, obj, 0);
+}
+
 void Jnjvm::startCollection() {
   referenceThread->ToEnqueueLock.acquire();
   referenceThread->SoftReferencesQueue.acquire();

Modified: vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.h?rev=121065&r1=121064&r2=121065&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.h (original)
+++ vmkit/branches/multi-vm/lib/J3/VMCore/Jnjvm.h Mon Dec  6 17:30:14 2010
@@ -314,7 +314,19 @@
   /// finalizeObject - invoke the finalizer of a java object
   ///
 	virtual void finalizeObject(mvm::gc* obj);
-    
+  
+  /// getReferentPtr - return the referent of a reference
+  ///
+	virtual mvm::gc** getReferent(mvm::gc* ref);
+
+  /// setReferentPtr - set the referent of a reference
+  ///
+	virtual void setReferent(mvm::gc* ref, mvm::gc* val);
+
+  /// enqueueReference - enqueue the reference
+  ///
+	virtual bool enqueueReference(mvm::gc* _obj);
+  
   /// setReferenceThread - Set the enqueue thread of this VM.
   ///
   void setReferenceThread(ReferenceThread* th) { referenceThread = th; }

Modified: vmkit/branches/multi-vm/lib/J3/VMCore/ReferenceQueue.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/J3/VMCore/ReferenceQueue.cpp?rev=121065&r1=121064&r2=121065&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/VMCore/ReferenceQueue.cpp (original)
+++ vmkit/branches/multi-vm/lib/J3/VMCore/ReferenceQueue.cpp Mon Dec  6 17:30:14 2010
@@ -15,33 +15,40 @@
 
 using namespace j3;
 
-ReferenceThread::ReferenceThread(Jnjvm* vm) :
-	  MutatorThread(vm->vmkit),
-    WeakReferencesQueue(ReferenceQueue::WEAK),
-    SoftReferencesQueue(ReferenceQueue::SOFT), 
-    PhantomReferencesQueue(ReferenceQueue::PHANTOM) {
+ReferenceThread::ReferenceThread(mvm::VMKit* vmkit) :
+	MutatorThread(vmkit),
+	WeakReferencesQueue(ReferenceQueue::WEAK),
+	SoftReferencesQueue(ReferenceQueue::SOFT), 
+	PhantomReferencesQueue(ReferenceQueue::PHANTOM) {
 
   ToEnqueue = new mvm::gc*[INITIAL_QUEUE_SIZE];
   ToEnqueueLength = INITIAL_QUEUE_SIZE;
   ToEnqueueIndex = 0;
-
-	MyVM = vm;
 }
 
-
-bool enqueueReference(mvm::gc* _obj) {
-  Jnjvm* vm = JavaThread::get()->getJVM();
-  JavaObject* obj = (JavaObject*)_obj;
+mvm::gc** getReferent(mvm::gc* obj) {
   llvm_gcroot(obj, 0);
-  JavaMethod* meth = vm->upcalls->EnqueueReference;
-  UserClass* cl = JavaObject::getClass(obj)->asClass();
-  return (bool)meth->invokeIntSpecialBuf(vm, cl, obj, 0);
+	mvm::VirtualMachine* vm = obj->getVirtualTable()->vm;
+	mvm::Thread::get()->attach(vm);
+	return vm->getReferent(obj);
 }
 
-void invokeEnqueue(mvm::gc* res) {
-  llvm_gcroot(res, 0);
+void setReferent(mvm::gc* obj, mvm::gc* val) {
+	printf("set referent: %p %p\n", obj, val);
+  llvm_gcroot(obj, 0);
+  llvm_gcroot(val, 0);
+	mvm::VirtualMachine* vm = obj->getVirtualTable()->vm;
+	mvm::Thread::get()->attach(vm);
+	vm->setReferent(obj, val);
+}
+ 
+void invokeEnqueue(mvm::gc* obj) {
+  llvm_gcroot(obj, 0);
   TRY {
-    enqueueReference(res);
+		mvm::VirtualMachine* vm = obj->getVirtualTable()->vm;
+		mvm::Thread::get()->attach(vm);
+		
+    vm->enqueueReference(obj);
   } IGNORE;
   mvm::Thread::get()->clearPendingException();
 }
@@ -92,32 +99,13 @@
   ToEnqueue[ToEnqueueIndex++] = obj;
 }
 
-mvm::gc** getReferentPtr(mvm::gc* _obj) {
-  JavaObjectReference* obj = (JavaObjectReference*)_obj;
-  llvm_gcroot(obj, 0);
-  return (mvm::gc**)JavaObjectReference::getReferentPtr(obj);
-}
-
-void setReferent(mvm::gc* _obj, mvm::gc* val) {
-  JavaObjectReference* obj = (JavaObjectReference*)_obj;
-  llvm_gcroot(obj, 0);
-  llvm_gcroot(val, 0);
-  JavaObjectReference::setReferent(obj, (JavaObject*)val);
-}
- 
-void clearReferent(mvm::gc* _obj) {
-  JavaObjectReference* obj = (JavaObjectReference*)_obj;
-  llvm_gcroot(obj, 0);
-  JavaObjectReference::setReferent(obj, NULL);
-}
-
 mvm::gc* ReferenceQueue::processReference(mvm::gc* reference, ReferenceThread* th, uintptr_t closure) {
   if (!mvm::Collector::isLive(reference, closure)) {
-    clearReferent(reference);
+    setReferent(reference, 0);
     return NULL;
   }
 
-	mvm::gc* referent = *(getReferentPtr(reference));
+	mvm::gc* referent = *(getReferent(reference));
 
   if (!referent) {
     return NULL;
@@ -139,7 +127,7 @@
     setReferent(newReference, newReferent);
     return newReference;
   } else {
-    clearReferent(newReference);
+    setReferent(newReference, 0);
     th->addToEnqueue(newReference);
     return NULL;
   }

Modified: vmkit/branches/multi-vm/lib/J3/VMCore/ReferenceQueue.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/J3/VMCore/ReferenceQueue.h?rev=121065&r1=121064&r2=121065&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/J3/VMCore/ReferenceQueue.h (original)
+++ vmkit/branches/multi-vm/lib/J3/VMCore/ReferenceQueue.h Mon Dec  6 17:30:14 2010
@@ -131,7 +131,7 @@
     PhantomReferencesQueue.addReference(ref);
   }
 
-  ReferenceThread(Jnjvm* vm);
+  ReferenceThread(mvm::VMKit* vmkit);
 
 	virtual void localDestroy() {
     delete[] ToEnqueue;

Modified: vmkit/branches/multi-vm/lib/Mvm/Runtime/SystemThreads.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/branches/multi-vm/lib/Mvm/Runtime/SystemThreads.cpp?rev=121065&r1=121064&r2=121065&view=diff
==============================================================================
--- vmkit/branches/multi-vm/lib/Mvm/Runtime/SystemThreads.cpp (original)
+++ vmkit/branches/multi-vm/lib/Mvm/Runtime/SystemThreads.cpp Mon Dec  6 17:30:14 2010
@@ -80,17 +80,13 @@
 
 typedef void (*destructor_t)(void*);
 
-void invokeFinalizer(mvm::gc* obj) {
+void invokeFinalize(mvm::gc* obj) {
   llvm_gcroot(obj, 0);
-  VirtualMachine* vm = obj->getVirtualTable()->vm; //JavaThread::get()->getJVM();
-	mvm::Thread::get()->attach(vm);
-	vm->finalizeObject(obj);
-}
-
-void invokeFinalize(mvm::gc* res) {
-  llvm_gcroot(res, 0);
   TRY {
-    invokeFinalizer(res);
+		llvm_gcroot(obj, 0);
+		VirtualMachine* vm = obj->getVirtualTable()->vm; //JavaThread::get()->getJVM();
+		mvm::Thread::get()->attach(vm);
+		vm->finalizeObject(obj);
   } IGNORE;
   mvm::Thread::get()->clearPendingException();
 }





More information about the vmkit-commits mailing list