From 8f8c6023f2fad38347cd19af9a81fa485fe3bd82 Mon Sep 17 00:00:00 2001 From: Mike Lockwood Date: Sun, 27 Mar 2011 19:35:43 -0700 Subject: [PATCH] UsbService: Fix JNI local reference leaks in the USB host support code Bug: 4175857 Change-Id: I8b385f2257e509b0fb4d5f9516e9813b8165352d Signed-off-by: Mike Lockwood --- services/jni/com_android_server_UsbService.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/services/jni/com_android_server_UsbService.cpp b/services/jni/com_android_server_UsbService.cpp index 816f76f82e1ce..6aeede2eddde5 100644 --- a/services/jni/com_android_server_UsbService.cpp +++ b/services/jni/com_android_server_UsbService.cpp @@ -117,9 +117,14 @@ static int usb_device_added(const char *devname, void* client_data) { jintArray endpointArray = env->NewIntArray(length); env->SetIntArrayRegion(endpointArray, 0, length, endpointValues.array()); + jstring deviceName = env->NewStringUTF(devname); env->CallVoidMethod(thiz, method_usbDeviceAdded, - env->NewStringUTF(devname), vendorId, productId, deviceClass, + deviceName, vendorId, productId, deviceClass, deviceSubClass, protocol, interfaceArray, endpointArray); + + env->DeleteLocalRef(interfaceArray); + env->DeleteLocalRef(endpointArray); + env->DeleteLocalRef(deviceName); checkAndClearExceptionFromCallback(env, __FUNCTION__); return 0; @@ -129,7 +134,9 @@ static int usb_device_removed(const char *devname, void* client_data) { JNIEnv* env = AndroidRuntime::getJNIEnv(); jobject thiz = (jobject)client_data; + jstring deviceName = env->NewStringUTF(devname); env->CallVoidMethod(thiz, method_usbDeviceRemoved, env->NewStringUTF(devname)); + env->DeleteLocalRef(deviceName); checkAndClearExceptionFromCallback(env, __FUNCTION__); return 0; }