diff options
| author | 2024-05-22 07:53:02 +0000 | |
|---|---|---|
| committer | 2024-05-22 07:53:02 +0000 | |
| commit | 1107f93b132f730b808ae42ff36c5e3f9532dc9d (patch) | |
| tree | 696dcc91438a59b6f78eaf7a2852b5839ab9cdf0 | |
| parent | b0f4faad9a79634c46d9dab6ad6f535a66d0774e (diff) | |
| parent | 621261dfae2ea1cac1010f5e2fb206041c37b554 (diff) | |
Merge "Revert "usb: Use Get/SetByteArrayRegion in bulkTransfer"" into main
| -rw-r--r-- | core/jni/android_hardware_UsbDeviceConnection.cpp | 16 |
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; } |