From 2af4393d2ea1ec2ebe0520489505b9e33817f6c1 Mon Sep 17 00:00:00 2001 From: Klaus Reimer Date: Wed, 17 Apr 2013 21:10:54 +0200 Subject: [PATCH] Catch double-exit crash with IllegalStatException --- src/main/c/src/LibUsb.c | 21 ++++++++++++++++-- .../libusb/linux-x86_64/libusb4java.so | Bin 130224 -> 130224 bytes .../de/ailis/usb4java/libusb/LibUSBTest.java | 12 ++++++++-- 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/main/c/src/LibUsb.c b/src/main/c/src/LibUsb.c index 92a407e..db00c84 100644 --- a/src/main/c/src/LibUsb.c +++ b/src/main/c/src/LibUsb.c @@ -25,6 +25,8 @@ static JavaVM *jvm; +static int defaultContextInitialized = 0; + /** * Version getVersion() */ @@ -46,7 +48,13 @@ JNIEXPORT jint JNICALL METHOD_NAME(LibUsb, init) { if (!context) { - return libusb_init(NULL); + if (defaultContextInitialized) + { + return illegalState(env, "Default context already initialized"); + } + int result = libusb_init(NULL); + if (!result) defaultContextInitialized = 1; + return result; } else { @@ -67,8 +75,17 @@ JNIEXPORT void JNICALL METHOD_NAME(LibUsb, exit) { struct libusb_context *ctx = unwrapContext(env, context); if (!ctx && context) return; + + if (!context && !defaultContextInitialized) + { + illegalState(env, "Default context not initialized"); + return; + } libusb_exit(ctx); - resetContext(env, context); + if (context) + resetContext(env, context); + else + defaultContextInitialized = 0; } /** 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 8f6052534c85039b6fa6caeb2dd69cab50a5953e..d059aabbd3686377334c2a96106e5ff9951f7158 100644 GIT binary patch delta 29662 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 diff --git a/src/test/java/de/ailis/usb4java/libusb/LibUSBTest.java b/src/test/java/de/ailis/usb4java/libusb/LibUSBTest.java index 2a12b33..a19053c 100644 --- a/src/test/java/de/ailis/usb4java/libusb/LibUSBTest.java +++ b/src/test/java/de/ailis/usb4java/libusb/LibUSBTest.java @@ -176,8 +176,16 @@ public class LibUSBTest assertEquals(LibUsb.SUCCESS, LibUsb.init(null)); LibUsb.exit(null); - // Double-exit without a context should work - LibUsb.exit(null); + try + { + // Double-exit should throw exception + LibUsb.exit(null); + fail("Double-exit should throw IllegalStateException"); + } + catch (IllegalStateException e) + { + // Expected behavior + } } /**