[vmkit-commits] [vmkit] r120456 - in /vmkit/trunk/lib/J3/VMCore: JnjvmClassLoader.cpp JnjvmClassLoader.h VirtualTables.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Tue Nov 30 12:22:31 PST 2010
Author: geoffray
Date: Tue Nov 30 14:22:30 2010
New Revision: 120456
URL: http://llvm.org/viewvc/llvm-project?rev=120456&view=rev
Log:
Make sure that the javaLoad of a j3 class loader will be visited by the GC.
Modified:
vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp
vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.h
vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp
Modified: vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp?rev=120456&r1=120455&r2=120456&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.cpp Tue Nov 30 14:22:30 2010
@@ -260,8 +260,10 @@
JnjvmClassLoader::JnjvmClassLoader(mvm::BumpPtrAllocator& Alloc,
JnjvmClassLoader& JCL, JavaObject* loader,
+ VMClassLoader* vmdata,
Jnjvm* I) : allocator(Alloc) {
llvm_gcroot(loader, 0);
+ llvm_gcroot(vmdata, 0);
bootstrapLoader = JCL.bootstrapLoader;
TheCompiler = bootstrapLoader->getCompiler()->Create("Applicative loader");
@@ -271,6 +273,7 @@
javaSignatures = new(allocator, "SignMap") SignMap();
strings = new(allocator, "StringList") StringList();
+ vmdata->JCL = this;
javaLoader = loader;
isolate = I;
@@ -886,15 +889,16 @@
vmdata =
(VMClassLoader*)(upcalls->vmdataClassLoader->getInstanceObjectField(loader));
if (!vmdata) {
- mvm::BumpPtrAllocator* A = new mvm::BumpPtrAllocator();
+ vmdata = VMClassLoader::allocate();
+ mvm::BumpPtrAllocator* A = new mvm::BumpPtrAllocator();
JCL = new(*A, "Class loader") JnjvmClassLoader(*A, *vm->bootstrapLoader,
- loader, vm);
- vmdata = VMClassLoader::allocate(JCL);
+ loader, vmdata, vm);
upcalls->vmdataClassLoader->setInstanceObjectField(loader, (JavaObject*)vmdata);
}
JavaObject::release(loader);
} else {
JCL = vmdata->getClassLoader();
+ assert(JCL->javaLoader == loader);
}
return JCL;
Modified: vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.h?rev=120456&r1=120455&r2=120456&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.h (original)
+++ vmkit/trunk/lib/J3/VMCore/JnjvmClassLoader.h Tue Nov 30 14:22:30 2010
@@ -44,6 +44,7 @@
class StringList;
class Typedef;
class TypeMap;
+class VMClassLoader;
class ZipArchive;
@@ -77,7 +78,7 @@
/// first use of a Java class loader.
///
JnjvmClassLoader(mvm::BumpPtrAllocator& Alloc, JnjvmClassLoader& JCL,
- JavaObject* loader, Jnjvm* isolate);
+ JavaObject* loader, VMClassLoader* vmdata, Jnjvm* isolate);
/// lookupComponentName - Try to find the component name of the given array
/// name. If the component name is not in the table of UTF8s and holder
@@ -443,11 +444,10 @@
public:
- static VMClassLoader* allocate(JnjvmClassLoader* J) {
+ static VMClassLoader* allocate() {
VMClassLoader* res = 0;
llvm_gcroot(res, 0);
res = (VMClassLoader*)gc::operator new(sizeof(VMClassLoader), &VT);
- res->JCL = J;
return res;
}
@@ -479,16 +479,13 @@
}
}
- /// VMClassLoader - Default constructors.
- ///
- VMClassLoader(JnjvmClassLoader* J) : JCL(J) {}
-
/// getClassLoader - Get the internal class loader.
///
JnjvmClassLoader* getClassLoader() {
return JCL;
}
+ friend class JnjvmClassLoader;
};
#define MAXIMUM_STRINGS 100
Modified: vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp?rev=120456&r1=120455&r2=120456&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/VirtualTables.cpp Tue Nov 30 14:22:30 2010
@@ -222,6 +222,8 @@
}
end = end->prev;
}
+
+ mvm::Collector::markAndTraceRoot(&javaLoader, closure);
}
void JnjvmBootstrapLoader::tracer(uintptr_t closure) {
More information about the vmkit-commits
mailing list