[vmkit-commits] [vmkit] r62966 - /vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp

Nicolas Geoffray nicolas.geoffray at lip6.fr
Sun Jan 25 09:47:01 PST 2009


Author: geoffray
Date: Sun Jan 25 11:47:01 2009
New Revision: 62966

URL: http://llvm.org/viewvc/llvm-project?rev=62966&view=rev
Log:
Statically initalized objects were not traced because they are
not GC allocated. Force tracing of their fields.


Modified:
    vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp

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

==============================================================================
--- vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp (original)
+++ vmkit/trunk/lib/JnJVM/VMCore/VirtualTables.cpp Sun Jan 25 11:47:01 2009
@@ -81,7 +81,11 @@
   }
   classLoader->MARK_AND_TRACE;
   for (uint32 i = 0; i < NR_ISOLATES; ++i) {
-    delegatee[i]->MARK_AND_TRACE;
+    // If the delegatee was static allocated, we want to trace its fields.
+    if (delegatee[i]) {
+      delegatee[i]->CALL_TRACER;
+      delegatee[i]->MARK_AND_TRACE;
+    }
   }
 
 }
@@ -153,8 +157,15 @@
   TRACE_DELEGATEE(upcalls->OfLong);
   TRACE_DELEGATEE(upcalls->OfDouble);
 #undef TRACE_DELEGATEE
-
-  TRACE_VECTOR(JavaString*, gc_allocator, bootstrapLoader->strings);
+  
+  for (std::vector<JavaString*, gc_allocator<JavaString*> >::iterator i = 
+       bootstrapLoader->strings.begin(),
+       e = bootstrapLoader->strings.end(); i!= e; ++i) {
+    (*i)->MARK_AND_TRACE;
+    // If the string was static allocated, we want to trace its lock.
+    LockObj* l = (*i)->lockObj();
+    if (l) l->MARK_AND_TRACE;
+  }
 
   mvm::Thread* th = th->get();
   th->CALL_TRACER;
@@ -172,7 +183,14 @@
   javaLoader->MARK_AND_TRACE;
   traceClassMap(classes);
   isolate->MARK_AND_TRACE;
-  TRACE_VECTOR(JavaString*, gc_allocator, strings);
+  for (std::vector<JavaString*,
+       gc_allocator<JavaString*> >::iterator i = strings.begin(), 
+       e = strings.end(); i!= e; ++i) {
+    (*i)->MARK_AND_TRACE; 
+    // If the string was static allocated, we want to trace its lock.
+    LockObj* l = (*i)->lockObj();
+    if (l) l->MARK_AND_TRACE;
+  }
 }
 
 void JnjvmBootstrapLoader::TRACER {}





More information about the vmkit-commits mailing list