From 59d25d00a17cc41d3b4416f9c90b29fe8e349645 Mon Sep 17 00:00:00 2001 From: Mike Lockwood Date: Thu, 18 Feb 2010 07:01:28 -0500 Subject: [PATCH] Catch Java exceptions in the FileObserver JNI code Change-Id: I8aed85baadef7a3ea80333b33df0743e0d349915 BUG: 2404428 Signed-off-by: Mike Lockwood --- core/jni/android_util_FileObserver.cpp | 28 +++++++++++++++----------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/core/jni/android_util_FileObserver.cpp b/core/jni/android_util_FileObserver.cpp index 13a1645557bdf..65e71304e8b67 100644 --- a/core/jni/android_util_FileObserver.cpp +++ b/core/jni/android_util_FileObserver.cpp @@ -71,28 +71,32 @@ static void android_os_fileobserver_observe(JNIEnv* env, jobject object, jint fd 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