Put wrappers on all stores of Object pointers into heap Objects.
Also:
Changed ++ loops to [i] loops where I'm touching.
Added some asserts.
Added dvmHeapSourceContainsAddress
Added dvmIsValidObjectAddress
Change-Id: I6586688246064aecabb1e22e1dca276fecee7795
diff --git a/vm/native/dalvik_system_VMDebug.c b/vm/native/dalvik_system_VMDebug.c
index dd6ac8a..d27926c 100644
--- a/vm/native/dalvik_system_VMDebug.c
+++ b/vm/native/dalvik_system_VMDebug.c
@@ -30,6 +30,8 @@
*/
static ArrayObject* convertStringArray(char** strings, size_t count)
{
+ Thread* self = dvmThreadSelf();
+
/*
* Allocate an array to hold the String objects.
*/
@@ -46,27 +48,26 @@
if (stringArray == NULL) {
/* probably OOM */
LOGD("Failed allocating array of %d strings\n", count);
+ assert(dvmCheckException(self));
return NULL;
}
- Thread* self = dvmThreadSelf();
-
/*
* Create the individual String objects and add them to the array.
*/
- StringObject** contents = (StringObject**) stringArray->contents;
size_t i;
for (i = 0; i < count; i++) {
- contents[i] = dvmCreateStringFromCstr(strings[i]);
- if (contents[i] == NULL) {
+ Object *str =
+ (Object *)dvmCreateStringFromCstr(strings[i]);
+ if (str == NULL) {
/* probably OOM; drop out now */
assert(dvmCheckException(self));
dvmReleaseTrackedAlloc((Object*)stringArray, self);
return NULL;
}
-
+ dvmSetObjectArrayElement(stringArray, i, str);
/* stored in tracked array, okay to release */
- dvmReleaseTrackedAlloc((Object*)contents[i], self);
+ dvmReleaseTrackedAlloc(str, self);
}
dvmReleaseTrackedAlloc((Object*)stringArray, self);