summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Mike Lockwood <lockwood@android.com> 2010-02-18 07:01:28 -0500
committer Mike Lockwood <lockwood@android.com> 2010-02-18 07:09:06 -0500
commit59d25d00a17cc41d3b4416f9c90b29fe8e349645 (patch)
tree9783937edb1650c8e83f99866d597f830fb98174
parentfc081668c307b7820c8c63c8cb3146760814454b (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.cpp28
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