[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