[vmkit-commits] [vmkit] r108829 - in /vmkit/trunk/lib: J3/Classpath/ClasspathReflect.h J3/Classpath/JavaUpcalls.cpp J3/VMCore/JavaClass.cpp Mvm/Runtime/Object.cpp
Nicolas Geoffray
nicolas.geoffray at lip6.fr
Tue Jul 20 05:32:30 PDT 2010
Author: geoffray
Date: Tue Jul 20 07:32:30 2010
New Revision: 108829
URL: http://llvm.org/viewvc/llvm-project?rev=108829&view=rev
Log:
Bugfix for references: the special tracer wasn't set, so the referent was always traced!
Modified:
vmkit/trunk/lib/J3/Classpath/ClasspathReflect.h
vmkit/trunk/lib/J3/Classpath/JavaUpcalls.cpp
vmkit/trunk/lib/J3/VMCore/JavaClass.cpp
vmkit/trunk/lib/Mvm/Runtime/Object.cpp
Modified: vmkit/trunk/lib/J3/Classpath/ClasspathReflect.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/ClasspathReflect.h?rev=108829&r1=108828&r2=108829&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/Classpath/ClasspathReflect.h (original)
+++ vmkit/trunk/lib/J3/Classpath/ClasspathReflect.h Tue Jul 20 07:32:30 2010
@@ -210,16 +210,12 @@
llvm_gcroot(self, 0);
return &(self->referent);
}
+
static void setReferent(JavaObjectReference* self, JavaObject* r) {
llvm_gcroot(self, 0);
llvm_gcroot(r, 0);
self->referent = r;
}
-
- static void staticTracer(JavaObjectReference* obj, uintptr_t closure) {
- mvm::Collector::markAndTrace(obj, &obj->queue, closure);
- mvm::Collector::markAndTrace(obj, &obj->nextOnQueue, closure);
- }
};
}
Modified: vmkit/trunk/lib/J3/Classpath/JavaUpcalls.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/Classpath/JavaUpcalls.cpp?rev=108829&r1=108828&r2=108829&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/Classpath/JavaUpcalls.cpp (original)
+++ vmkit/trunk/lib/J3/Classpath/JavaUpcalls.cpp Tue Jul 20 07:32:30 2010
@@ -511,11 +511,6 @@
JavaObjectConstructor::staticTracer(obj, closure);
}
-extern "C" void nativeJavaObjectReferenceTracer(
- JavaObjectReference* obj, uintptr_t closure) {
- JavaObjectReference::staticTracer(obj, closure);
-}
-
extern "C" void nativeJavaObjectVMThreadTracer(
JavaObjectVMThread* obj, uintptr_t closure) {
JavaObjectVMThread::staticTracer(obj, closure);
@@ -526,6 +521,9 @@
JavaObjectVMThread::staticDestructor(obj);
}
+extern "C" void ObjectReferenceTracer(
+ JavaObjectReference* obj, uintptr_t closure);
+
// Defined in Classpath/ClasspathVMClassLoader.cpp
extern "C" ArrayObject* nativeGetBootPackages();
@@ -1043,8 +1041,7 @@
newReference = UPCALL_CLASS(loader, "java/lang/ref/Reference");
newReference->getVirtualVT()->setNativeTracer(
- (uintptr_t)nativeJavaObjectReferenceTracer,
- "nativeJavaObjectReferenceTracer");
+ (uintptr_t)ObjectReferenceTracer, "ObjectReferenceTracer");
EnqueueReference =
UPCALL_METHOD(loader, "java/lang/ref/Reference", "enqueue", "()Z",
Modified: vmkit/trunk/lib/J3/VMCore/JavaClass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/J3/VMCore/JavaClass.cpp?rev=108829&r1=108828&r2=108829&view=diff
==============================================================================
--- vmkit/trunk/lib/J3/VMCore/JavaClass.cpp (original)
+++ vmkit/trunk/lib/J3/VMCore/JavaClass.cpp Tue Jul 20 07:32:30 2010
@@ -41,7 +41,6 @@
Class** ClassArray::InterfacesArray;
extern "C" void JavaArrayTracer(JavaObject*);
-extern "C" void JavaObjectTracer(JavaObject*);
extern "C" void ArrayObjectTracer(JavaObject*);
extern "C" void RegularObjectTracer(JavaObject*);
@@ -1477,7 +1476,7 @@
assert(C->super->virtualVT && "Super has no VT");
// Set the regular object tracer, destructor and delete.
- tracer = (uintptr_t)RegularObjectTracer;
+ tracer = (uintptr_t)C->super->tracer;
destructor = 0;
operatorDelete = 0;
@@ -1544,7 +1543,7 @@
} else {
// Set the tracer, destructor and delete.
- tracer = (uintptr_t)JavaObjectTracer;
+ tracer = (uintptr_t)RegularObjectTracer;
destructor = 0;
operatorDelete = 0;
Modified: vmkit/trunk/lib/Mvm/Runtime/Object.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/Mvm/Runtime/Object.cpp?rev=108829&r1=108828&r2=108829&view=diff
==============================================================================
--- vmkit/trunk/lib/Mvm/Runtime/Object.cpp (original)
+++ vmkit/trunk/lib/Mvm/Runtime/Object.cpp Tue Jul 20 07:32:30 2010
@@ -202,12 +202,14 @@
gc* reference, VirtualMachine* vm, uintptr_t closure) {
if (!Collector::isLive(reference, closure)) {
vm->clearReferent(reference);
- return 0;
+ return NULL;
}
gc* referent = *(vm->getReferentPtr(reference));
- if (!referent) return 0;
+ if (!referent) {
+ return NULL;
+ }
if (semantics == SOFT) {
// TODO: are we are out of memory? Consider that we always are for now.
@@ -218,16 +220,16 @@
// Nothing to do.
}
+ gc* newReference =
+ mvm::Collector::getForwardedReference(reference, closure);
if (Collector::isLive(referent, closure)) {
gc* newReferent = mvm::Collector::getForwardedReferent(referent, closure);
- gc* newReference =
- mvm::Collector::getForwardedReference(reference, closure);
vm->setReferent(newReference, newReferent);
return newReference;
} else {
- vm->clearReferent(reference);
- vm->addToEnqueue(reference);
- return 0;
+ vm->clearReferent(newReference);
+ vm->addToEnqueue(newReference);
+ return NULL;
}
}
More information about the vmkit-commits
mailing list