diff options
author | Elliott Hughes <enh@google.com> | 2013-02-05 11:22:16 -0800 |
---|---|---|
committer | Steve Kondik <shade@chemlab.org> | 2013-04-11 12:11:30 -0700 |
commit | 381357b91ae0441e304136e25a93ab45b367eb61 (patch) | |
tree | 6476d0315f076f7bc16580f5e82b67f97cd20c3e | |
parent | 3a48f778dcaf2ac2994f5d911e15f1ef960d6118 (diff) | |
download | android_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.cpp | 9 |
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; } |