OSDN Git Service

dalvik: return positive hash code in Dalvik with Houdini
[android-x86/dalvik.git] / vm / Hash.cpp
index 826f545..cd4530a 100644 (file)
@@ -57,13 +57,12 @@ HashTable* dvmHashTableCreate(size_t initialSize, HashFreeFunc freeFunc)
     pHashTable->numEntries = pHashTable->numDeadEntries = 0;
     pHashTable->freeFunc = freeFunc;
     pHashTable->pEntries =
-        (HashEntry*) malloc(pHashTable->tableSize * sizeof(HashEntry));
+        (HashEntry*) calloc(pHashTable->tableSize, sizeof(HashEntry));
     if (pHashTable->pEntries == NULL) {
         free(pHashTable);
         return NULL;
     }
 
-    memset(pHashTable->pEntries, 0, pHashTable->tableSize * sizeof(HashEntry));
     return pHashTable;
 }
 
@@ -220,12 +219,12 @@ void* dvmHashTableLookup(HashTable* pHashTable, u4 itemHash, void* item,
             {
                 if (!resizeHash(pHashTable, pHashTable->tableSize * 2)) {
                     /* don't really have a way to indicate failure */
-                    LOGE("Dalvik hash resize failure");
+                    ALOGE("Dalvik hash resize failure");
                     dvmAbort();
                 }
                 /* note "pEntry" is now invalid */
             } else {
-                //LOGW("okay %d/%d/%d",
+                //ALOGW("okay %d/%d/%d",
                 //    pHashTable->numEntries, pHashTable->tableSize,
                 //    (pHashTable->tableSize * LOAD_NUMER) / LOAD_DENOM);
             }
@@ -291,9 +290,11 @@ bool dvmHashTableRemove(HashTable* pHashTable, u4 itemHash, void* item)
  */
 int dvmHashForeachRemove(HashTable* pHashTable, HashForeachRemoveFunc func)
 {
-    int i, val;
+    int i, val, tableSize;
 
-    for (i = 0; i < pHashTable->tableSize; i++) {
+    tableSize = pHashTable->tableSize;
+
+    for (i = 0; i < tableSize; i++) {
         HashEntry* pEnt = &pHashTable->pEntries[i];
 
         if (pEnt->data != NULL && pEnt->data != HASH_TOMBSTONE) {
@@ -319,9 +320,11 @@ int dvmHashForeachRemove(HashTable* pHashTable, HashForeachRemoveFunc func)
  */
 int dvmHashForeach(HashTable* pHashTable, HashForeachFunc func, void* arg)
 {
-    int i, val;
+    int i, val, tableSize;
 
-    for (i = 0; i < pHashTable->tableSize; i++) {
+    tableSize = pHashTable->tableSize;
+
+    for (i = 0; i < tableSize; i++) {
         HashEntry* pEnt = &pHashTable->pEntries[i];
 
         if (pEnt->data != NULL && pEnt->data != HASH_TOMBSTONE) {