summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2013-02-05 11:22:16 -0800
committerSteve Kondik <shade@chemlab.org>2013-04-11 12:11:30 -0700
commit381357b91ae0441e304136e25a93ab45b367eb61 (patch)
tree6476d0315f076f7bc16580f5e82b67f97cd20c3e
parent3a48f778dcaf2ac2994f5d911e15f1ef960d6118 (diff)
downloadandroid_dalvik-381357b91ae0441e304136e25a93ab45b367eb61.tar.gz
android_dalvik-381357b91ae0441e304136e25a93ab45b367eb61.tar.bz2
android_dalvik-381357b91ae0441e304136e25a93ab45b367eb61.zip
Fix a tracked reference leak in dvmGenerateProxyClass.
Bug: https://code.google.com/p/android/issues/detail?id=43919 Change-Id: Ib5c217368ba75f4422d0c932c2c67daaaeddea4b
-rw-r--r--vm/reflect/Proxy.cpp9
1 files changed, 4 insertions, 5 deletions
diff --git a/vm/reflect/Proxy.cpp b/vm/reflect/Proxy.cpp
index 02d43eb1d..57d32e793 100644
--- a/vm/reflect/Proxy.cpp
+++ b/vm/reflect/Proxy.cpp
@@ -66,7 +66,7 @@ static bool mustWrapException(const Method* method, const Object* throwable);
ClassObject* dvmGenerateProxyClass(StringObject* str, ArrayObject* interfaces,
Object* loader)
{
- int result = -1;
+ ClassObject* result = NULL;
ArrayObject* throws = NULL;
char* nameStr = dvmCreateCstrFromString(str);
@@ -205,14 +205,13 @@ ClassObject* dvmGenerateProxyClass(StringObject* str, ArrayObject* interfaces,
goto bail;
}
- result = 0;
+ result = newClass;
bail:
free(nameStr);
- if (result != 0) {
+ if (result == NULL) {
/* must free innards explicitly if we didn't finish linking */
dvmFreeClassInnards(newClass);
- newClass = NULL;
if (!dvmCheckException(dvmThreadSelf())) {
/* throw something */
dvmThrowRuntimeException(NULL);
@@ -223,7 +222,7 @@ bail:
dvmReleaseTrackedAlloc((Object*) throws, NULL);
dvmReleaseTrackedAlloc((Object*) newClass, NULL);
- return newClass;
+ return result;
}