[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