[vmkit-commits] [vmkit] r57421 - in /vmkit/trunk: include/mvm/Allocator.h lib/JnJVM/Classpath/ClasspathVMObject.cpp lib/JnJVM/Classpath/ClasspathVMThread.cpp lib/JnJVM/VMCore/JavaClass.cpp lib/JnJVM/VMCore/JavaClass.h lib/JnJVM/VMCore/JavaInitialise.cpp lib/JnJVM/VMCore/Jni.cpp lib/JnJVM/VMCore/Jnjvm.cpp lib/JnJVM/VMCore/Jnjvm.h lib/JnJVM/VMCore/JnjvmClassLoader.cpp lib/JnJVM/VMCore/LockedMap.cpp lib/JnJVM/VMCore/LockedMap.h lib/JnJVM/VMCore/Reader.cpp lib/JnJVM/VMCore/Zip.h

Nicolas Geoffray nicolas.geoffray at lip6.fr
Sun Oct 12 11:55:14 PDT 2008


Author: geoffray
Date: Sun Oct 12 13:55:13 2008
New Revision: 57421

URL: http://llvm.org/viewvc/llvm-project?rev=57421&view=rev
Log:
Code cleanup.
Inline locks in objects.


Modified:
    vmkit/trunk/include/mvm/Allocator.h
    vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMObject.cpp
    vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThread.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp
    vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
    vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp
    vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp
    vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp
    vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h
    vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp
    vmkit/trunk/lib/JnJVM/VMCore/LockedMap.cpp
    vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h
    vmkit/trunk/lib/JnJVM/VMCore/Reader.cpp
    vmkit/trunk/lib/JnJVM/VMCore/Zip.h

Modified: vmkit/trunk/include/mvm/Allocator.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/mvm/Allocator.h?rev=57421&r1=57420&r2=57421&view=diff

==============================================================================
--- vmkit/trunk/include/mvm/Allocator.h (original)
+++ vmkit/trunk/include/mvm/Allocator.h Sun Oct 12 13:55:13 2008
@@ -56,8 +56,8 @@
     return allocator->allocatePermanentMemory(sz);
   }
 
-  void operator delete(void* obj, Allocator* allocator) {
-    allocator->freePermanentMemory(obj);
+  void operator delete(void* ptr) {
+    free(ptr);
   }
 };
 

Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMObject.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMObject.cpp?rev=57421&r1=57420&r2=57421&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMObject.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMObject.cpp Sun Oct 12 13:55:13 2008
@@ -41,7 +41,7 @@
     size = cl->getVirtualSize();
   }
   JavaObject* res = (JavaObject*)
-    vm->allocator.allocateManagedObject(size, src->getVirtualTable());
+    vm->allocator->allocateManagedObject(size, src->getVirtualTable());
   memcpy(res, src, size);
   res->lock = 0;
   return (jobject)res;

Modified: vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThread.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThread.cpp?rev=57421&r1=57420&r2=57421&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThread.cpp (original)
+++ vmkit/trunk/lib/JnJVM/Classpath/ClasspathVMThread.cpp Sun Oct 12 13:55:13 2008
@@ -59,15 +59,15 @@
   UserClass* vmthClass = (UserClass*)vmThread->classOf;
   Jnjvm* isolate = intern->isolate;
   JavaObject* thread = isolate->upcalls->assocThread->getObjectField(vmThread);
-  ThreadSystem* ts = isolate->threadSystem;
+  ThreadSystem& ts = isolate->threadSystem;
   bool isDaemon = isolate->upcalls->daemon->getInt8Field(thread);
   intern->threadID = (mvm::Thread::self() << 8) & 0x7FFFFF00;
 
 
   if (!isDaemon) {
-    ts->nonDaemonLock->lock();
-    ts->nonDaemonThreads++;
-    ts->nonDaemonLock->unlock();
+    ts.nonDaemonLock->lock();
+    ts.nonDaemonThreads++;
+    ts.nonDaemonLock->unlock();
   }
   
 #ifdef SERVICE_VM
@@ -81,11 +81,11 @@
   isolate->upcalls->runVMThread->invokeIntSpecial(isolate, vmthClass, vmThread);
   
   if (!isDaemon) {
-    ts->nonDaemonLock->lock();
-    ts->nonDaemonThreads--;
-    if (ts->nonDaemonThreads == 0)
-      ts->nonDaemonVar->signal();
-    ts->nonDaemonLock->unlock();
+    ts.nonDaemonLock->lock();
+    ts.nonDaemonThreads--;
+    if (ts.nonDaemonThreads == 0)
+      ts.nonDaemonVar->signal();
+    ts.nonDaemonLock->unlock();
   }
 
 #ifdef SERVICE_VM

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.cpp Sun Oct 12 13:55:13 2008
@@ -340,13 +340,14 @@
   return doNew(n, vm->allocator);
 }
 
-JavaArray* UserClassArray::doNew(sint32 n, mvm::Allocator& allocator) {
+JavaArray* UserClassArray::doNew(sint32 n, mvm::Allocator* allocator) {
   UserCommonClass* cl = baseClass();
   assert(cl && virtualVT && "array class not resolved");
 
   uint32 primSize = cl->isPrimitive() ? cl->virtualSize : sizeof(JavaObject*);
   uint32 size = sizeof(JavaObject) + sizeof(sint32) + n * primSize;
-  JavaArray* res = (JavaArray*)allocator.allocateManagedObject(size, virtualVT);
+  JavaArray* res = (JavaArray*)allocator->allocateManagedObject(size,
+                                                                virtualVT);
   res->initialise(this);
   res->size = n;
   return res;
@@ -487,8 +488,8 @@
   assert(this && "No class when allocating.");
   assert(this->isReady() && "Uninitialized class when allocating.");
   JavaObject* res = 
-    (JavaObject*)vm->allocator.allocateManagedObject(getVirtualSize(),
-                                                     getVirtualVT());
+    (JavaObject*)vm->allocator->allocateManagedObject(getVirtualSize(),
+                                                      getVirtualVT());
   res->classOf = this;
   return res;
 }

Modified: vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h?rev=57421&r1=57420&r2=57421&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaClass.h Sun Oct 12 13:55:13 2008
@@ -477,7 +477,7 @@
   /// isReady - Has this class been initialized?
   ///
   bool isReady() {
-    return status >= inClinit;
+    return status >= clinitParent;
   }
 
   /// isResolved - Has this class been resolved?
@@ -710,7 +710,7 @@
 private:
   /// doNew - Allocate a new array with the given allocator.
   ///
-  JavaArray* doNew(sint32 n, mvm::Allocator& allocator);
+  JavaArray* doNew(sint32 n, mvm::Allocator* allocator);
 
 public:
   

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JavaInitialise.cpp Sun Oct 12 13:55:13 2008
@@ -9,6 +9,7 @@
 
 #include <vector>
 
+#include "mvm/Allocator.h"
 #include "mvm/VirtualMachine.h"
 #include "mvm/Threads/Locks.h"
 #include "mvm/Threads/Thread.h"
@@ -240,17 +241,13 @@
 #endif
 }
 
-void Jnjvm::runApplication(int argc, char** argv) {
-  mvm::Thread::set(this->bootstrapThread);
-  this->runMain(argc, argv);
-}
-
 mvm::VirtualMachine* mvm::VirtualMachine::createJVM() {
 #ifdef SERVICE_VM
   ServiceDomain* vm = ServiceDomain::allocateService();
   vm->startExecution();
 #else
-  Jnjvm* vm = Jnjvm::allocateIsolate();
+  mvm::Allocator* allocator = new mvm::Allocator();
+  Jnjvm* vm = gc_new(Jnjvm)(allocator);
 #endif
   return vm;
 }

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jni.cpp Sun Oct 12 13:55:13 2008
@@ -2206,16 +2206,16 @@
 
 jobject NewGlobalRef(JNIEnv* env, jobject obj) {
   Jnjvm* vm = NativeUtil::myVM(env);
-  vm->globalRefsLock->lock();
+  vm->globalRefsLock.lock();
   vm->globalRefs.push_back((JavaObject*)obj);
-  vm->globalRefsLock->unlock();
+  vm->globalRefsLock.unlock();
   return obj;
 }
 
 
 void DeleteGlobalRef(JNIEnv* env, jobject globalRef) {
   Jnjvm* vm = NativeUtil::myVM(env);
-  vm->globalRefsLock->lock();
+  vm->globalRefsLock.lock();
   for (std::vector<JavaObject*, gc_allocator<JavaObject*> >::iterator i =
                                                       vm->globalRefs.begin(),
             e = vm->globalRefs.end(); i!= e; ++i) {
@@ -2224,7 +2224,7 @@
       break;
     }
   }
-  vm->globalRefsLock->unlock();
+  vm->globalRefsLock.unlock();
 }
 
 

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.cpp Sun Oct 12 13:55:13 2008
@@ -121,8 +121,8 @@
       PRINT_DEBUG(JNJVM_LOAD, 0, COLOR_NORMAL, "%s\n", printString());
       
       JavaObject* val = 
-        (JavaObject*)vm->allocator.allocateManagedObject(cl->getStaticSize(),
-                                                         cl->getStaticVT());
+        (JavaObject*)vm->allocator->allocateManagedObject(cl->getStaticSize(),
+                                                          cl->getStaticVT());
       val->initialise(cl);
       CommonClass::field_map* map = cl->getStaticFields();
       for (CommonClass::field_iterator i = map->begin(), e = map->end(); i!= e;
@@ -144,7 +144,7 @@
         }
         if (exc) {
           if (exc->classOf->isAssignableFrom(vm->upcalls->newException)) {
-            JavaThread::get()->isolate->initializerError(exc);
+            vm->initializerError(exc);
           } else {
             JavaThread::throwException(exc);
           }
@@ -353,23 +353,19 @@
 }
 
 Jnjvm::~Jnjvm() {
-#ifdef MULTIPLE_GC
-  GC->destroy();
-  delete GC;
-#endif
-  
-  delete hashStr;  
-  delete globalRefsLock;
-  delete threadSystem;
+  if (hashStr) {
+    hashStr->~StringMap();
+    allocator->freePermanentMemory(hashStr);
+  }
+  if (hashUTF8) {
+    hashUTF8->~UTF8Map();
+    allocator->freePermanentMemory(hashUTF8);
+  }
 }
 
 Jnjvm::Jnjvm() {
-#ifdef MULTIPLE_GC
-  GC = 0;
-#endif
+  hashUTF8 = 0;
   hashStr = 0;
-  globalRefsLock = 0;
-  threadSystem = 0;
 }
 
 #define PATH_MANIFEST "META-INF/MANIFEST.MF"
@@ -446,7 +442,7 @@
   ArrayUInt8* bytes = Reader::openFile(vm->bootstrapLoader,
                                        jarFile);
 
-  ZipArchive archive(bytes, &vm->allocator);
+  ZipArchive archive(bytes, vm->allocator);
   if (archive.getOfscd() != -1) {
     ZipFile* file = archive.getFile(PATH_MANIFEST);
     if (file) {
@@ -643,9 +639,7 @@
 
 
 void Jnjvm::print(mvm::PrintBuffer* buf) const {
-  buf->write("Java isolate: ");
-  buf->write(name);
-
+  buf->write("Java isolate");
 }
 
 JnjvmClassLoader* Jnjvm::loadAppClassLoader() {
@@ -760,18 +754,18 @@
 }
 
 void Jnjvm::waitForExit() { 
-  threadSystem->nonDaemonLock->lock();
-  --(threadSystem->nonDaemonThreads);
+  threadSystem.nonDaemonLock->lock();
+  --(threadSystem.nonDaemonThreads);
   
-  while (threadSystem->nonDaemonThreads) {
-    threadSystem->nonDaemonVar->wait(threadSystem->nonDaemonLock);
+  while (threadSystem.nonDaemonThreads) {
+    threadSystem.nonDaemonVar->wait(threadSystem.nonDaemonLock);
   }
 
-  threadSystem->nonDaemonLock->unlock();  
+  threadSystem.nonDaemonLock->unlock();  
   return;
 }
 
-void Jnjvm::runMain(int argc, char** argv) {
+void Jnjvm::runApplication(int argc, char** argv) {
   ClArgumentsInfo info;
 
   info.readArgs(argc, argv, this);
@@ -781,7 +775,13 @@
     //                                  " JnJVM Java Virtual Machine\n");
     argv = argv + pos - 1;
     argc = argc - pos + 1;
-    
+  
+    bootstrapThread = allocator_new(&allocator, JavaThread)();
+    bootstrapThread->initialise(0, this);
+    bootstrapThread->baseSP = mvm::Thread::get()->baseSP;
+    JavaThread::set(bootstrapThread); 
+    bootstrapThread->threadID = (mvm::Thread::self() << 8) & 0x7FFFFF00;
+
     loadBootstrap();
 #ifdef SERVICE_VM
     ServiceDomain::initialise((ServiceDomain*)this);
@@ -809,92 +809,47 @@
   }
 }
 
-void Jnjvm::runIsolate(const char* className, ArrayObject* args) {
-  int stack;
-  Jnjvm *isolate = allocateIsolate(&stack);
-  isolate->loadBootstrap();
-  isolate->executeClass(className, args);
-  isolate->waitForExit();
-}
-
-Jnjvm* Jnjvm::allocateIsolate(void* sp) {
-  Jnjvm *isolate= gc_new(Jnjvm)();
-
-#ifdef MULTIPLE_GC
-  isolate->GC = Collector::allocate();
-#endif 
-  isolate->classpath = getenv("CLASSPATH");
-  if (!(isolate->classpath)) {
-    isolate->classpath = ".";
-  }
-  
-  isolate->bootstrapThread = allocator_new(&isolate->allocator, JavaThread)();
-  isolate->bootstrapThread->initialise(0, isolate);
-  void* baseSP = sp ? sp : mvm::Thread::get()->baseSP;
-  JavaThread::set(isolate->bootstrapThread);
-  
-#ifdef MULTIPLE_GC
-  isolate->bootstrapThread->GC = isolate->GC;
-  isolate->GC->inject_my_thread(baseSP);
-#else
-  if (sp) Collector::inject_my_thread(baseSP);
-#endif
+Jnjvm::Jnjvm(mvm::Allocator* A) {
 
-  isolate->bootstrapThread->baseSP = baseSP;
-  
-  isolate->bootstrapThread->threadID = (mvm::Thread::self() << 8) & 0x7FFFFF00;
-  isolate->threadSystem = new ThreadSystem();
-  isolate->name = "isolate";
-  isolate->appClassLoader = 0;
-  isolate->jniEnv = &JNI_JNIEnvTable;
-  isolate->javavmEnv = &JNI_JavaVMTable;
+  allocator = A;
+  classpath = getenv("CLASSPATH");
+  if (!classpath) classpath = ".";
+  
+  appClassLoader = 0;
+  jniEnv = &JNI_JNIEnvTable;
+  javavmEnv = &JNI_JavaVMTable;
   
-  isolate->hashStr = new StringMap();
-  isolate->globalRefsLock = mvm::Lock::allocNormal();
 
 #ifdef ISOLATE_SHARING
-  isolate->initialiseStatics();
+  initialiseStatics();
 #endif
   
-  isolate->upcalls = isolate->bootstrapLoader->upcalls;
+  upcalls = bootstrapLoader->upcalls;
 
 #ifdef ISOLATE_SHARING
-  isolate->throwable = isolate->upcalls->newThrowable;
+  throwable = upcalls->newThrowable;
 #endif
-  isolate->arrayClasses[JavaArray::T_BOOLEAN - 4] = 
-    isolate->upcalls->ArrayOfBool;
-  isolate->arrayClasses[JavaArray::T_BYTE - 4] = 
-    isolate->upcalls->ArrayOfByte;
-  isolate->arrayClasses[JavaArray::T_CHAR - 4] = 
-    isolate->upcalls->ArrayOfChar;
-  isolate->arrayClasses[JavaArray::T_SHORT - 4] = 
-    isolate->upcalls->ArrayOfShort;
-  isolate->arrayClasses[JavaArray::T_INT - 4] = 
-    isolate->upcalls->ArrayOfInt;
-  isolate->arrayClasses[JavaArray::T_FLOAT - 4] = 
-    isolate->upcalls->ArrayOfFloat;
-  isolate->arrayClasses[JavaArray::T_LONG - 4] = 
-    isolate->upcalls->ArrayOfLong;
-  isolate->arrayClasses[JavaArray::T_DOUBLE - 4] = 
-    isolate->upcalls->ArrayOfDouble;
-
-  isolate->primitiveMap[I_VOID] = isolate->upcalls->OfVoid;
-  isolate->primitiveMap[I_BOOL] = isolate->upcalls->OfBool;
-  isolate->primitiveMap[I_BYTE] = isolate->upcalls->OfByte;
-  isolate->primitiveMap[I_CHAR] = isolate->upcalls->OfChar;
-  isolate->primitiveMap[I_SHORT] = isolate->upcalls->OfShort;
-  isolate->primitiveMap[I_INT] = isolate->upcalls->OfInt;
-  isolate->primitiveMap[I_FLOAT] = isolate->upcalls->OfFloat;
-  isolate->primitiveMap[I_LONG] = isolate->upcalls->OfLong;
-  isolate->primitiveMap[I_DOUBLE] = isolate->upcalls->OfDouble;
+  arrayClasses[JavaArray::T_BOOLEAN - 4] = upcalls->ArrayOfBool;
+  arrayClasses[JavaArray::T_BYTE - 4] = upcalls->ArrayOfByte;
+  arrayClasses[JavaArray::T_CHAR - 4] = upcalls->ArrayOfChar;
+  arrayClasses[JavaArray::T_SHORT - 4] = upcalls->ArrayOfShort;
+  arrayClasses[JavaArray::T_INT - 4] = upcalls->ArrayOfInt;
+  arrayClasses[JavaArray::T_FLOAT - 4] = upcalls->ArrayOfFloat;
+  arrayClasses[JavaArray::T_LONG - 4] = upcalls->ArrayOfLong;
+  arrayClasses[JavaArray::T_DOUBLE - 4] = upcalls->ArrayOfDouble;
+
+  primitiveMap[I_VOID] = upcalls->OfVoid;
+  primitiveMap[I_BOOL] = upcalls->OfBool;
+  primitiveMap[I_BYTE] = upcalls->OfByte;
+  primitiveMap[I_CHAR] = upcalls->OfChar;
+  primitiveMap[I_SHORT] = upcalls->OfShort;
+  primitiveMap[I_INT] = upcalls->OfInt;
+  primitiveMap[I_FLOAT] = upcalls->OfFloat;
+  primitiveMap[I_LONG] = upcalls->OfLong;
+  primitiveMap[I_DOUBLE] = upcalls->OfDouble;
   
-  isolate->upcalls->initialiseClasspath(bootstrapLoader);
+  upcalls->initialiseClasspath(bootstrapLoader);
  
-#if defined(ISOLATE) || defined(ISOLATE_SHARING)
-  isolate->hashUTF8 = new UTF8Map(&isolate->allocator,
-                                  isolate->upcalls->ArrayOfChar);
-#else
-  isolate->hashUTF8 = isolate->bootstrapLoader->hashUTF8;
-#endif
-  return isolate;
+  hashStr = new(allocator) StringMap();
+  hashUTF8 = new(allocator) UTF8Map(allocator, upcalls->ArrayOfChar);
 }

Modified: vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h?rev=57421&r1=57420&r2=57421&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Jnjvm.h Sun Oct 12 13:55:13 2008
@@ -90,12 +90,9 @@
 ///
 class Jnjvm : public mvm::VirtualMachine {
 public:
-#ifdef MULTIPLE_GC
-  /// GC - The garbage collector of this JVM.
+  /// allocator - Memory allocator of this JVM.
   ///
-  Collector* GC;
-#endif
-
+  mvm::Allocator* allocator;
 #ifdef ISOLATE_SHARING
   UserClass* throwable;
 #endif
@@ -227,12 +224,8 @@
   /// threadSystem - The thread system to manage non-daemon threads and
   /// control the end of the JVM's execution.
   ///
-  ThreadSystem* threadSystem;
-
-  /// allocator - Memory allocator of this JVM.
-  ///
-  mvm::Allocator allocator;
-  
+  ThreadSystem threadSystem;
+ 
   /// jniEnv - The JNI environment of this JVM.
   ///
   void* jniEnv;
@@ -259,19 +252,15 @@
 
   /// globalRefsLock - Lock for adding a new global reference.
   ///
-  mvm::Lock* globalRefsLock;
+  mvm::LockNormal globalRefsLock;
   
-  /// name - The name of this JVM.
-  ///
-  const char* name;
-
   /// appClassLoader - The bootstrap class loader.
   ///
   JnjvmClassLoader* appClassLoader;
 
   /// hashStr - Hash map of java/lang/String objects allocated by this JVM.
   ///
-  StringMap * hashStr;
+  StringMap* hashStr;
   
   /// hashUTF8 - Tables of UTF8s defined by this class loader. Shared
   /// by all class loaders in a no isolation configuration.
@@ -340,15 +329,9 @@
     return primitiveMap[id];
   }
 
-  /// allocateIsolate - Allocates a new JVM.
-  ///
-  static Jnjvm* allocateIsolate(void* sp = 0);
-  
-  /// runIsolate - Runs an isolate with the given main class and with
-  /// these Java args. This should be called internaly by the javax.isolate
-  /// package.
+  /// Jnjvm - Allocates a new JVM.
   ///
-  static void runIsolate(const char* className, ArrayObject* args);
+  Jnjvm(mvm::Allocator* allocator);
   
   /// runApplication - Runs the application with the given command line.
   /// User-visible function, inherited by the VirtualMachine class.

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/JnjvmClassLoader.cpp Sun Oct 12 13:55:13 2008
@@ -47,10 +47,10 @@
   
   JCL->allocator = new mvm::Allocator();
   
-  JCL->hashUTF8 = new UTF8Map(JCL->allocator, 0);
-  JCL->classes = new ClassMap();
-  JCL->javaTypes = new TypeMap(); 
-  JCL->javaSignatures = new SignMap(); 
+  JCL->hashUTF8 = new(JCL->allocator) UTF8Map(JCL->allocator, 0);
+  JCL->classes = new(JCL->allocator) ClassMap();
+  JCL->javaTypes = new(JCL->allocator) TypeMap(); 
+  JCL->javaSignatures = new(JCL->allocator) SignMap(); 
   
   JCL->bootClasspathEnv = getenv("JNJVM_BOOTCLASSPATH");
   if (!JCL->bootClasspathEnv) {
@@ -74,13 +74,12 @@
   TheModule = new JnjvmModule("Applicative loader");
   TheModuleProvider = new JnjvmModuleProvider(TheModule);
   bootstrapLoader = JCL.bootstrapLoader;
-  
   allocator = new mvm::Allocator();
-
-  hashUTF8 = new UTF8Map(allocator, bootstrapLoader->upcalls->ArrayOfChar);
-  classes = new ClassMap();
-  javaTypes = new TypeMap();
-  javaSignatures = new SignMap();
+  
+  hashUTF8 = new(allocator) UTF8Map(allocator, bootstrapLoader->upcalls->ArrayOfChar);
+  classes = new(allocator) ClassMap();
+  javaTypes = new(allocator) TypeMap();
+  javaSignatures = new(allocator) SignMap();
 
   javaLoader = loader;
   isolate = I;
@@ -297,7 +296,7 @@
 
 UserClass* JnjvmClassLoader::constructClass(const UTF8* name, ArrayUInt8* bytes) {
   assert(bytes && "constructing a class without bytes");
-  classes->lock->lock();
+  classes->lock.lock();
   ClassMap::iterator End = classes->map.end();
   ClassMap::iterator I = classes->map.find(name);
   UserClass* res = 0;
@@ -307,7 +306,7 @@
   } else {
     res = ((UserClass*)(I->second));
   }
-  classes->lock->unlock();
+  classes->lock.unlock();
   return res;
 }
 
@@ -316,7 +315,7 @@
   assert(baseClass && "constructing an array class without a base class");
   assert(baseClass->classLoader == this && 
          "constructing an array with wrong loader");
-  classes->lock->lock();
+  classes->lock.lock();
   ClassMap::iterator End = classes->map.end();
   ClassMap::iterator I = classes->map.find(name);
   UserClassArray* res = 0;
@@ -326,39 +325,29 @@
   } else {
     res = ((UserClassArray*)(I->second));
   }
-  classes->lock->unlock();
+  classes->lock.unlock();
   return res;
 }
 
 Typedef* JnjvmClassLoader::constructType(const UTF8* name) {
+  javaTypes->lock.lock();
   Typedef* res = javaTypes->lookup(name);
   if (res == 0) {
     res = Typedef::constructType(name, hashUTF8, isolate);
-    javaTypes->lock->lock();
-    Typedef* tmp = javaTypes->lookup(name);
-    if (tmp == 0) javaTypes->hash(name, res);
-    else {
-      delete res;
-      res = tmp;
-    }
-    javaTypes->lock->unlock();
+    javaTypes->hash(name, res);
   }
+  javaTypes->lock.unlock();
   return res;
 }
 
 Signdef* JnjvmClassLoader::constructSign(const UTF8* name) {
+  javaSignatures->lock.lock();
   Signdef* res = javaSignatures->lookup(name);
   if (res == 0) {
     res = new Signdef(name, this);
-    javaSignatures->lock->lock();
-    Signdef* tmp = javaSignatures->lookup(name);
-    if (tmp == 0) javaSignatures->hash(name, res);
-    else {
-      delete res;
-      res = tmp;
-    }
-    javaSignatures->lock->unlock();
+    javaSignatures->hash(name, res);
   }
+  javaSignatures->lock.unlock();
   return res;
 }
 

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/LockedMap.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/LockedMap.cpp Sun Oct 12 13:55:13 2008
@@ -59,7 +59,7 @@
 }
 
 void UTF8Map::replace(const UTF8* oldUTF8, const UTF8* newUTF8) {
-  lock->lock();
+  lock.lock();
   uint32 key = readerHasher(oldUTF8->elements, oldUTF8->size);
   std::pair<UTF8Map::iterator, UTF8Map::iterator> p = map.equal_range(key);
   
@@ -70,7 +70,7 @@
     }
   }
   map.insert(std::make_pair(key, newUTF8));
-  lock->unlock();
+  lock.unlock();
 
 }
 
@@ -78,7 +78,7 @@
   sint32 size = strlen(asciiz);
   uint32 key = asciizHasher(asciiz, size);
   const UTF8* res = 0;
-  lock->lock();
+  lock.lock();
   
   std::pair<UTF8Map::iterator, UTF8Map::iterator> p = map.equal_range(key);
   
@@ -98,7 +98,7 @@
     map.insert(std::make_pair(key, res));
   }
   
-  lock->unlock();
+  lock.unlock();
   return res;
 }
 
@@ -106,7 +106,7 @@
   sint32 size = (sint32)len;
   uint32 key = readerHasher(buf, size);
   const UTF8* res = 0;
-  lock->lock();
+  lock.lock();
   
   std::pair<UTF8Map::iterator, UTF8Map::iterator> p = map.equal_range(key);
 
@@ -124,7 +124,7 @@
     map.insert(std::make_pair(key, res));
   }
   
-  lock->unlock();
+  lock.unlock();
   return res;
 }
 
@@ -132,7 +132,7 @@
   sint32 size = strlen(asciiz);
   uint32 key = asciizHasher(asciiz, size);
   const UTF8* res = 0;
-  lock->lock();
+  lock.lock();
   
   std::pair<UTF8Map::iterator, UTF8Map::iterator> p = map.equal_range(key);
   
@@ -143,7 +143,7 @@
     }
   }
 
-  lock->unlock();
+  lock.unlock();
   return res;
 }
 
@@ -151,7 +151,7 @@
   sint32 size = (sint32)len;
   uint32 key = readerHasher(buf, size);
   const UTF8* res = 0;
-  lock->lock();
+  lock.lock();
   
   std::pair<UTF8Map::iterator, UTF8Map::iterator> p = map.equal_range(key);
 
@@ -162,7 +162,7 @@
     }
   }
 
-  lock->unlock();
+  lock.unlock();
   return res;
 }
 

Modified: vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h?rev=57421&r1=57420&r2=57421&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/LockedMap.h Sun Oct 12 13:55:13 2008
@@ -40,48 +40,48 @@
 };
 
 template<class Key, class Container, class Compare, class Meta>
-class LockedMap {
+class LockedMap : public mvm::PermanentObject {
 public:
   typedef typename std::map<const Key, Container, Compare>::iterator iterator;
   typedef Container (*funcCreate)(Key& V, Meta meta);
 
-  mvm::Lock* lock;
+  mvm::LockNormal lock;
   std::map<const Key, Container, Compare,
            gc_allocator<std::pair<const Key, Container> > > map;
   
   inline Container lookupOrCreate(Key& V, Meta meta, funcCreate func) {
-    lock->lock();
+    lock.lock();
     iterator End = map.end();
     iterator I = map.find(V);
     if (I == End) {
       Container res = func(V, meta);
       map.insert(std::make_pair(V, res));
-      lock->unlock();
+      lock.unlock();
       return res;
     } else {
-      lock->unlock();
+      lock.unlock();
       return ((Container)(I->second));
     }
   }
   
   inline void remove(Key V) {
-    lock->lock();
+    lock.lock();
     map.erase(V);
-    lock->unlock();
+    lock.unlock();
   }
 
   inline Container lookup(Key V) {
-    lock->lock();
+    lock.lock();
     iterator End = map.end();
     iterator I = map.find(V);
-    lock->unlock();
+    lock.unlock();
     return I != End ? ((Container)(I->second)) : 0; 
   }
 
   inline void hash(Key k, Container c) {
-    lock->lock();
+    lock.lock();
     map.insert(std::make_pair(k, c));
-    lock->unlock();
+    lock.unlock();
   }
 
 
@@ -91,11 +91,11 @@
 
 };
 
-class UTF8Map {
+class UTF8Map : public mvm::PermanentObject {
 public:
   typedef std::multimap<const uint32, const UTF8*>::iterator iterator;
   
-  mvm::Lock* lock;
+  mvm::LockNormal lock;
   mvm::Allocator* allocator;
   UserClassArray* array;
   std::multimap<const uint32, const UTF8*> map;
@@ -105,13 +105,11 @@
   const UTF8* lookupReader(const uint16* buf, uint32 size);
   
   UTF8Map(mvm::Allocator* A, UserClassArray* cl) {
-    lock = mvm::Lock::allocNormal();
     allocator = A;
     array = cl;
   }
 
   ~UTF8Map() {
-    delete lock;
     for (iterator i = map.begin(), e = map.end(); i!= e; ++i) {
       allocator->freePermanentMemory((void*)i->second);
     }
@@ -131,116 +129,75 @@
     public LockedMap<const UTF8*, UserCommonClass*, ltutf8, JnjvmClassLoader* > {
 public:
   
-  ClassMap() {
-    lock = mvm::Lock::allocNormal();
-  }
+  ClassMap() {}
 
-  ~ClassMap() {
-    delete lock;
-  }
+  ~ClassMap() {}
   
 };
 
-class StringMap {
+class StringMap :
+  public LockedMap<const UTF8*, JavaString*, ltutf8, Jnjvm*> {
 public:
   
-  mvm::Lock* lock;
-  typedef std::map<const UTF8*, JavaString*, ltutf8>::iterator iterator;
-  std::map<const UTF8*, JavaString*, ltutf8 > map;
-  
-  typedef JavaString* (*funcCreate)(const UTF8*& V, Jnjvm *vm);
-  
-  StringMap() {
-    lock = mvm::Lock::allocNormal();
-  }
+  StringMap() {}
   
   ~StringMap() {
-    delete lock;
     for (iterator i = map.begin(), e = map.end(); i!= e; ++i) {
       free(i->second);
     }
-  }
-  
-  inline JavaString* lookupOrCreate(const UTF8*& V, Jnjvm *vm, funcCreate func) {
-    lock->lock();
-    iterator End = map.end();
-    iterator I = map.find(V);
-    if (I == End) {
-      JavaString* res = func(V, vm);
-      map.insert(std::make_pair(V, res));
-      lock->unlock();
-      return res;
-    } else {
-      lock->unlock();
-      return I->second;
-    }
-  } 
+  }  
 };
 
-class TypeMap {
+class TypeMap : public mvm::PermanentObject {
 public:
-  mvm::Lock* lock;
+  mvm::LockNormal lock;
   
   std::map<const UTF8*, Typedef*, ltutf8> map;
   typedef std::map<const UTF8*, Typedef*, ltutf8>::iterator iterator;
   
   inline Typedef* lookup(const UTF8* V) {
-    lock->lock();
     iterator End = map.end();
     iterator I = map.find(V);
-    lock->unlock();
     return I != End ? I->second : 0; 
   }
 
   inline void hash(const UTF8* k, Typedef* c) {
-    lock->lock();
     map.insert(std::make_pair(k, c));
-    lock->unlock();
   }
   
-  TypeMap() {
-    lock = mvm::Lock::allocRecursive();
-  }
+  TypeMap() {}
   
   ~TypeMap() {
     for (iterator i = map.begin(), e = map.end(); i!= e; ++i) {
       delete i->second;
     }
-    delete lock;
   }
   
 };
 
-class SignMap {
+class SignMap : public mvm::PermanentObject {
 public:
-  mvm::Lock* lock;
+  mvm::LockNormal lock;
   
   std::map<const UTF8*, Signdef*, ltutf8> map;
   typedef std::map<const UTF8*, Signdef*, ltutf8>::iterator iterator;
   
   inline Signdef* lookup(const UTF8* V) {
-    lock->lock();
     iterator End = map.end();
     iterator I = map.find(V);
-    lock->unlock();
     return I != End ? I->second : 0; 
   }
 
   inline void hash(const UTF8* k, Signdef* c) {
-    lock->lock();
     map.insert(std::make_pair(k, c));
-    lock->unlock();
   }
   
-  SignMap() {
-    lock = mvm::Lock::allocRecursive();
-  }
+  SignMap() {}
   
   ~SignMap() {
     for (iterator i = map.begin(), e = map.end(); i!= e; ++i) {
       delete i->second;
     }
-    delete lock;
   }
   
 };

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Reader.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Reader.cpp Sun Oct 12 13:55:13 2008
@@ -33,7 +33,7 @@
     long nbb = ftell(fp);
     fseek(fp, 0, SeekSet);
     UserClassArray* array = loader->upcalls->ArrayOfByte;
-    res = (ArrayUInt8*)array->doNew((sint32)nbb, *loader->allocator);
+    res = (ArrayUInt8*)array->doNew((sint32)nbb, loader->allocator);
     fread(res->elements, nbb, 1, fp);
     fclose(fp);
   }
@@ -47,7 +47,7 @@
   if (file != 0) {
     UserClassArray* array = loader->upcalls->ArrayOfByte;
     ArrayUInt8* res = 
-      (ArrayUInt8*)array->doNew((sint32)file->ucsize, *loader->allocator);
+      (ArrayUInt8*)array->doNew((sint32)file->ucsize, loader->allocator);
     if (archive->readFile(res, file) != 0) {
       ret = res;
     }

Modified: vmkit/trunk/lib/JnJVM/VMCore/Zip.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/JnJVM/VMCore/Zip.h?rev=57421&r1=57420&r2=57421&view=diff

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/Zip.h (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/Zip.h Sun Oct 12 13:55:13 2008
@@ -62,7 +62,8 @@
     for (table_iterator I = filetable.begin(), E = filetable.end(); I != E; 
          ++I) {
       allocator->freePermanentMemory((void*)I->first);
-      delete(I->second, allocator);
+      I->second->~ZipFile();
+      allocator->freePermanentMemory((void*)I->second);
     }
   }
 





More information about the vmkit-commits mailing list