Fix misuse of ALLOC_DONT_TRACK.
The internal String creation function doesn't allow ALLOC_DONT_TRACK.
This changes the call to use ALLOC_DEFAULT and then explicitly release
the tracked allocation.
For bug 2558142.
Change-Id: I57dfa4824578c3a3a33f6836b75f51391cc73746
diff --git a/vm/native/dalvik_system_VMDebug.c b/vm/native/dalvik_system_VMDebug.c
index 612c9b5..34398d0 100644
--- a/vm/native/dalvik_system_VMDebug.c
+++ b/vm/native/dalvik_system_VMDebug.c
@@ -49,25 +49,27 @@
return NULL;
}
+ Thread* self = dvmThreadSelf();
+
/*
* Create the individual String objects and add them to the array.
- *
- * We can use ALLOC_DONT_TRACK here because the objects are being
- * added to a tracked array object as they're created.
*/
StringObject** contents = (StringObject**) stringArray->contents;
size_t i;
for (i = 0; i < count; i++) {
- contents[i] = dvmCreateStringFromCstr(strings[i], ALLOC_DONT_TRACK);
+ contents[i] = dvmCreateStringFromCstr(strings[i], ALLOC_DEFAULT);
if (contents[i] == NULL) {
/* probably OOM; drop out now */
assert(dvmCheckException(dvmThreadSelf()));
- dvmReleaseTrackedAlloc((Object*)stringArray, NULL);
+ dvmReleaseTrackedAlloc((Object*)stringArray, self);
return NULL;
}
+
+ /* stored in tracked array, okay to release */
+ dvmReleaseTrackedAlloc((Object*)contents[i], self);
}
- dvmReleaseTrackedAlloc((Object*)stringArray, NULL);
+ dvmReleaseTrackedAlloc((Object*)stringArray, self);
return stringArray;
}