[vmkit-commits] [vmkit] r180355 - Chasing a bug in release build that occurs in stale reference reset

Peter Senna Tschudin peter.senna at gmail.com
Thu Apr 25 10:02:42 PDT 2013


Author: peter.senna
Date: Thu Apr 25 12:00:49 2013
New Revision: 180355

URL: http://llvm.org/viewvc/llvm-project?rev=180355&view=rev
Log:
Chasing a bug in release build that occurs in stale reference reset
code.(cherry picked from commit d6902549f517ecf9edc5b5fd4cda2c0860f7a5ed)

Modified:
    vmkit/trunk/lib/j3/VMCore/JnjvmStaleRef.cpp

Modified: vmkit/trunk/lib/j3/VMCore/JnjvmStaleRef.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JnjvmStaleRef.cpp?rev=180355&r1=180354&r2=180355&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JnjvmStaleRef.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JnjvmStaleRef.cpp Thu Apr 25 12:00:49 2013
@@ -3,6 +3,8 @@
 #include "Jnjvm.h"
 #include "VMStaticInstance.h"
 
+#include <sstream>
+
 #if RESET_STALE_REFERENCES
 
 #define DEBUG_VERBOSE_STALE_REF		1
@@ -26,23 +28,17 @@ void Jnjvm::resetReferencesToBundle(int6
 void Jnjvm::resetReferenceIfStale(const void* source, void** ref)
 {
 	if (!ref || !(*ref)) return;	// Invalid or null reference
+	const JavaObject* src = reinterpret_cast<const JavaObject*>(source);
 	JavaObject** objRef = reinterpret_cast<JavaObject**>(ref);
 
 	// Check the type of Java object. Some Java objects are not real object, but
 	// are bridges between Java and the VM objects.
-	if (VMClassLoader::isVMClassLoader(*objRef)) {
-		return resetReferenceIfStale(
-			reinterpret_cast<const JavaObject*>(source),
-			reinterpret_cast<VMClassLoader**>(ref));
-	} else if (VMStaticInstance::isVMStaticInstance(*objRef)) {
-		return resetReferenceIfStale(
-			reinterpret_cast<const JavaObject*>(source),
-			reinterpret_cast<VMStaticInstance**>(ref));
-	} else {
-		return resetReferenceIfStale(
-			reinterpret_cast<const JavaObject*>(source),
-			objRef);
-	}
+	if (VMClassLoader::isVMClassLoader(*objRef))
+		resetReferenceIfStale(src, reinterpret_cast<VMClassLoader**>(ref));
+	else if (VMStaticInstance::isVMStaticInstance(*objRef))
+		resetReferenceIfStale(src, reinterpret_cast<VMStaticInstance**>(ref));
+	else
+		resetReferenceIfStale(src, objRef);
 }
 
 void Jnjvm::resetReferenceIfStale(const JavaObject *source, VMClassLoader** ref)
@@ -92,6 +88,8 @@ void Jnjvm::resetReferenceIfStale(const
 #endif
 
 	CommonClass* ccl = JavaObject::getClass(*ref);
+	assert (ccl && "Object Class is not null.");
+
 	if (!ccl->classLoader->isZombie()) return;
 
 #if DEBUG_VERBOSE_STALE_REF





More information about the vmkit-commits mailing list