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