Pin objects in the debug registry hash table.
Evidently, these objects are presumed to have stable addresses.
Change-Id: I20ba2adc9b78ac157ba210a8a4d5b2b7355c33fb
diff --git a/vm/alloc/Copying.c b/vm/alloc/Copying.c
index a2532ac..3d307e6 100644
--- a/vm/alloc/Copying.c
+++ b/vm/alloc/Copying.c
@@ -1461,27 +1461,6 @@
* External root scavenging routines.
*/
-static void scavengeHashTable(HashTable *table)
-{
- HashEntry *entry;
- void *obj;
- int i;
-
- if (table == NULL) {
- return;
- }
- dvmHashTableLock(table);
- for (i = 0; i < table->tableSize; ++i) {
- entry = &table->pEntries[i];
- obj = entry->data;
- if (obj == NULL || obj == HASH_TOMBSTONE) {
- continue;
- }
- scavengeReference((Object **)(void *)&entry->data);
- }
- dvmHashTableUnlock(table);
-}
-
static void pinHashTableEntries(HashTable *table)
{
HashEntry *entry;
@@ -2254,6 +2233,7 @@
pinReferenceTable(&gDvm.jniPinRefTable);
pinReferenceTable(&gcHeap->nonCollectableRefs);
pinHashTableEntries(gDvm.loadedClasses);
+ pinHashTableEntries(gDvm.dbgRegistry);
pinPrimitiveClasses();
pinInternedStrings();
@@ -2292,9 +2272,6 @@
scavengeReference(&gDvm.internalErrorObj);
scavengeReference(&gDvm.noClassDefFoundErrorObj);
- LOG_SCAV("Scavenging gDvm.dbgRegistry");
- scavengeHashTable(gDvm.dbgRegistry);
-
// LOG_SCAV("Scavenging gDvm.internedString");
scavengeInternedStrings();