Catch Java exceptions in the FileObserver JNI code
Change-Id: I8aed85baadef7a3ea80333b33df0743e0d349915
BUG: 2404428
Signed-off-by: Mike Lockwood <lockwood@android.com>
diff --git a/core/jni/android_util_FileObserver.cpp b/core/jni/android_util_FileObserver.cpp
index 13a1645..65e7130 100644
--- a/core/jni/android_util_FileObserver.cpp
+++ b/core/jni/android_util_FileObserver.cpp
@@ -71,28 +71,32 @@
return;
}
- while (num_bytes >= (int)sizeof(*event))
- {
- int event_size;
- event = (struct inotify_event *)(event_buf + event_pos);
-
+ while (num_bytes >= (int)sizeof(*event))
+ {
+ int event_size;
+ event = (struct inotify_event *)(event_buf + event_pos);
+
jstring path = NULL;
if (event->len > 0)
{
path = env->NewStringUTF(event->name);
}
-
- env->CallVoidMethod(object, method_onEvent, event->wd, event->mask, path);
+
+ env->CallVoidMethod(object, method_onEvent, event->wd, event->mask, path);
+ if (env->ExceptionCheck()) {
+ env->ExceptionDescribe();
+ env->ExceptionClear();
+ }
if (path != NULL)
{
env->DeleteLocalRef(path);
}
-
- event_size = sizeof(*event) + event->len;
- num_bytes -= event_size;
- event_pos += event_size;
- }
+
+ event_size = sizeof(*event) + event->len;
+ num_bytes -= event_size;
+ event_pos += event_size;
+ }
}
#endif // HAVE_INOTIFY