diff options
author | 2010-02-18 07:01:28 -0500 | |
---|---|---|
committer | 2010-02-18 07:09:06 -0500 | |
commit | 59d25d00a17cc41d3b4416f9c90b29fe8e349645 (patch) | |
tree | 9783937edb1650c8e83f99866d597f830fb98174 | |
parent | fc081668c307b7820c8c63c8cb3146760814454b (diff) |
Catch Java exceptions in the FileObserver JNI code
Change-Id: I8aed85baadef7a3ea80333b33df0743e0d349915
BUG: 2404428
Signed-off-by: Mike Lockwood <lockwood@android.com>
-rw-r--r-- | core/jni/android_util_FileObserver.cpp | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/core/jni/android_util_FileObserver.cpp b/core/jni/android_util_FileObserver.cpp index 13a1645557bd..65e71304e8b6 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 |