Update monitor enter/exit exception handling in interpreter.

This CL prevents from checking if an exception is pending when we just
threw a NPE. Move the conditional check after calling monitor enter/exit
routine.

Change-Id: Icfebf3914f6439b47038d7a00932251f8000c1c2
diff --git a/src/interpreter/interpreter.cc b/src/interpreter/interpreter.cc
index 5992c67..e1773f0 100644
--- a/src/interpreter/interpreter.cc
+++ b/src/interpreter/interpreter.cc
@@ -970,10 +970,11 @@
         Object* obj = shadow_frame.GetVRegReference(inst->VRegA_11x());
         if (UNLIKELY(obj == NULL)) {
           ThrowNullPointerExceptionFromDexPC(shadow_frame.GetCurrentLocationForThrow());
+          HANDLE_PENDING_EXCEPTION();
         } else {
           DoMonitorEnter(self, obj);
+          POSSIBLY_HANDLE_PENDING_EXCEPTION(Next_1xx);
         }
-        POSSIBLY_HANDLE_PENDING_EXCEPTION(Next_1xx);
         break;
       }
       case Instruction::MONITOR_EXIT: {
@@ -981,10 +982,11 @@
         Object* obj = shadow_frame.GetVRegReference(inst->VRegA_11x());
         if (UNLIKELY(obj == NULL)) {
           ThrowNullPointerExceptionFromDexPC(shadow_frame.GetCurrentLocationForThrow());
+          HANDLE_PENDING_EXCEPTION();
         } else {
           DoMonitorExit(self, obj);
+          POSSIBLY_HANDLE_PENDING_EXCEPTION(Next_1xx);
         }
-        POSSIBLY_HANDLE_PENDING_EXCEPTION(Next_1xx);
         break;
       }
       case Instruction::CHECK_CAST: {