summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Febin Thattil <febinthattil@google.com> 2024-05-22 07:53:02 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-05-22 07:53:02 +0000
commit1107f93b132f730b808ae42ff36c5e3f9532dc9d (patch)
tree696dcc91438a59b6f78eaf7a2852b5839ab9cdf0
parentb0f4faad9a79634c46d9dab6ad6f535a66d0774e (diff)
parent621261dfae2ea1cac1010f5e2fb206041c37b554 (diff)
Merge "Revert "usb: Use Get/SetByteArrayRegion in bulkTransfer"" into main
-rw-r--r--core/jni/android_hardware_UsbDeviceConnection.cpp16
1 files changed, 6 insertions, 10 deletions
diff --git a/core/jni/android_hardware_UsbDeviceConnection.cpp b/core/jni/android_hardware_UsbDeviceConnection.cpp
index 7267eb8cb3dc..a0228428e90e 100644
--- a/core/jni/android_hardware_UsbDeviceConnection.cpp
+++ b/core/jni/android_hardware_UsbDeviceConnection.cpp
@@ -190,21 +190,17 @@ android_hardware_UsbDeviceConnection_bulk_request(JNIEnv *env, jobject thiz,
return -1;
}
- bool is_dir_in = (endpoint & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN;
- jbyte *bufferBytes = (jbyte *)malloc(length);
-
- if (!is_dir_in && buffer) {
- env->GetByteArrayRegion(buffer, start, length, bufferBytes);
+ jbyte* bufferBytes = NULL;
+ if (buffer) {
+ bufferBytes = (jbyte*)env->GetPrimitiveArrayCritical(buffer, NULL);
}
- jint result = usb_device_bulk_transfer(device, endpoint, bufferBytes, length, timeout);
+ jint result = usb_device_bulk_transfer(device, endpoint, bufferBytes + start, length, timeout);
- if (is_dir_in && buffer) {
- env->SetByteArrayRegion(buffer, start, length, bufferBytes);
+ if (bufferBytes) {
+ env->ReleasePrimitiveArrayCritical(buffer, bufferBytes, 0);
}
- free(bufferBytes);
-
return result;
}