OSDN Git Service

UsbService: Fix JNI local reference leaks in the USB host support code
authorMike Lockwood <lockwood@android.com>
Mon, 28 Mar 2011 02:35:43 +0000 (19:35 -0700)
committerMike Lockwood <lockwood@android.com>
Mon, 28 Mar 2011 02:35:43 +0000 (19:35 -0700)
Bug: 4175857

Change-Id: I8b385f2257e509b0fb4d5f9516e9813b8165352d
Signed-off-by: Mike Lockwood <lockwood@android.com>
services/jni/com_android_server_UsbService.cpp

index 816f76f..6aeede2 100644 (file)
@@ -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;
 }