[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