diff --git a/src/main/c/src/Transfer.c b/src/main/c/src/Transfer.c index 0a5e1ac..b613e41 100644 --- a/src/main/c/src/Transfer.c +++ b/src/main/c/src/Transfer.c @@ -306,16 +306,23 @@ static void LIBUSB_CALL transferCallback(struct libusb_transfer *transfer) // The saved reference to the Java Transfer object. jobject jTransfer = transferData->transferObject; - // Call back into Java. - (*env)->CallVoidMethod(env, jCallback, jCallbackMethod, jTransfer); - - // Cleanup Java Transfer object too, if requested. + // Read flags before calling the Java method, as it could + // free the Transfer itself. if (transfer->flags & LIBUSB_TRANSFER_FREE_TRANSFER) { + // Call back into Java. + (*env)->CallVoidMethod(env, jCallback, jCallbackMethod, jTransfer); + + // Cleanup Java Transfer object too, if requested. cleanupGlobalReferences(env, jTransfer); resetTransfer(env, jTransfer); free(transferData); } + else + { + // Call back into Java. + (*env)->CallVoidMethod(env, jCallback, jCallbackMethod, jTransfer); + } THREAD_END } diff --git a/src/main/resources/de/ailis/usb4java/libusb/linux-x86_64/libusb4java.so b/src/main/resources/de/ailis/usb4java/libusb/linux-x86_64/libusb4java.so index cb2f9de..2545e37 100644 Binary files a/src/main/resources/de/ailis/usb4java/libusb/linux-x86_64/libusb4java.so and b/src/main/resources/de/ailis/usb4java/libusb/linux-x86_64/libusb4java.so differ diff --git a/src/main/resources/de/ailis/usb4java/libusb/windows-x86_64/libusb-1.0.dll b/src/main/resources/de/ailis/usb4java/libusb/windows-x86_64/libusb-1.0.dll index a156868..977eb0c 100644 Binary files a/src/main/resources/de/ailis/usb4java/libusb/windows-x86_64/libusb-1.0.dll and b/src/main/resources/de/ailis/usb4java/libusb/windows-x86_64/libusb-1.0.dll differ diff --git a/src/main/resources/de/ailis/usb4java/libusb/windows-x86_64/libusb4java.dll b/src/main/resources/de/ailis/usb4java/libusb/windows-x86_64/libusb4java.dll index 44b9c4b..141fa12 100644 Binary files a/src/main/resources/de/ailis/usb4java/libusb/windows-x86_64/libusb4java.dll and b/src/main/resources/de/ailis/usb4java/libusb/windows-x86_64/libusb4java.dll differ