OSDN Git Service

dalvik: return positive hash code in Dalvik with Houdini
[android-x86/dalvik.git] / vm / Sync.cpp
index 8a3803e..2b4c025 100644 (file)
@@ -101,10 +101,6 @@ Monitor* dvmCreateMonitor(Object* obj)
         ALOGE("Unable to allocate monitor");
         dvmAbort();
     }
-    if (((u4)mon & 7) != 0) {
-        ALOGE("Misaligned monitor: %p", mon);
-        dvmAbort();
-    }
     mon->obj = obj;
     dvmInitMutex(&mon->lock);
 
@@ -276,6 +272,11 @@ static void logContentionEvent(Thread *self, u4 waitMs, u4 samplePercent,
     size_t len;
     int fd;
 
+    /* When a thread is being destroyed it is normal that the frame depth is zero */
+    if (self->interpSave.curFrame == NULL) {
+        return;
+    }
+
     saveArea = SAVEAREA_FROM_FP(self->interpSave.curFrame);
     meth = saveArea->method;
     cp = eventBuffer;
@@ -1217,7 +1218,12 @@ void dvmThreadInterrupt(Thread* thread)
 #ifndef WITH_COPYING_GC
 u4 dvmIdentityHashCode(Object *obj)
 {
-    return (u4)obj;
+    /*
+     * The following assumes that objects are allocated at even boundaries, so
+     * the shift preserves uniqueness of hashCode() while guaranteeing a
+     * non-negative result (for the convenience of some applications,like MiTalk).
+     */
+    return (u4)(((u4)obj)>>1);
 }
 #else
 /*