[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