diff --git a/jni/evdev_reader/evdev_reader.c b/jni/evdev_reader/evdev_reader.c index 16586d43..c003911c 100644 --- a/jni/evdev_reader/evdev_reader.c +++ b/jni/evdev_reader/evdev_reader.c @@ -6,6 +6,7 @@ #include #include #include +#include JNIEXPORT jint JNICALL Java_com_limelight_binding_input_evdev_EvdevReader_open(JNIEnv *env, jobject this, jstring absolutePath) { @@ -60,12 +61,33 @@ Java_com_limelight_binding_input_evdev_EvdevReader_hasKey(JNIEnv *env, jobject t JNIEXPORT jint JNICALL Java_com_limelight_binding_input_evdev_EvdevReader_read(JNIEnv *env, jobject this, jint fd, jbyteArray buffer) { jint ret; - jbyte *data = (*env)->GetByteArrayElements(env, buffer, NULL); + jbyte *data; + int pollres; + struct pollfd pollinfo; + + data = (*env)->GetByteArrayElements(env, buffer, NULL); if (data == NULL) { return -1; } - ret = read(fd, data, sizeof(struct input_event)); + do + { + // Unwait every 250 ms to return to caller if the fd is closed + pollinfo.fd = fd; + pollinfo.events = POLLIN; + pollinfo.revents = 0; + pollres = poll(&pollinfo, 1, 250); + } + while (pollres == 0); + + if (pollres > 0 && (pollinfo.revents & POLLIN)) { + // We'll have data available now + ret = read(fd, data, sizeof(struct input_event)); + } + else { + // There must have been a failure + ret = -1; + } (*env)->ReleaseByteArrayElements(env, buffer, data, 0); diff --git a/libs/arm64-v8a/libevdev_reader.so b/libs/arm64-v8a/libevdev_reader.so index 669f25f9..4f9ea00b 100755 Binary files a/libs/arm64-v8a/libevdev_reader.so and b/libs/arm64-v8a/libevdev_reader.so differ diff --git a/libs/armeabi-v7a/libevdev_reader.so b/libs/armeabi-v7a/libevdev_reader.so index f95ed9b5..fc4ba86b 100755 Binary files a/libs/armeabi-v7a/libevdev_reader.so and b/libs/armeabi-v7a/libevdev_reader.so differ diff --git a/libs/mips/libevdev_reader.so b/libs/mips/libevdev_reader.so index 85604e92..6a9a3979 100755 Binary files a/libs/mips/libevdev_reader.so and b/libs/mips/libevdev_reader.so differ diff --git a/libs/x86/libevdev_reader.so b/libs/x86/libevdev_reader.so index f9ac6f6e..7b7ed214 100755 Binary files a/libs/x86/libevdev_reader.so and b/libs/x86/libevdev_reader.so differ diff --git a/libs/x86_64/libevdev_reader.so b/libs/x86_64/libevdev_reader.so index 8051dde0..b6f93fe9 100755 Binary files a/libs/x86_64/libevdev_reader.so and b/libs/x86_64/libevdev_reader.so differ