diff --git a/src/jnienv.cpp b/src/jnienv.cpp index 9133fc89b9..36a27e6dfc 100644 --- a/src/jnienv.cpp +++ b/src/jnienv.cpp @@ -180,6 +180,8 @@ ThrowNew(Thread* t, jclass c, const char* message) void JNICALL DeleteLocalRef(Thread* t, jobject r) { + ENTER(t, Thread::ActiveState); + disposeLocalReference(t, r); } @@ -290,7 +292,7 @@ NewObject(Thread* t, jclass c, jmethodID m, ...) va_list a; va_start(a, m); - jobject r = NewObject(t, c, m, a); + jobject r = NewObjectV(t, c, m, a); va_end(a); diff --git a/src/machine.cpp b/src/machine.cpp index 510745ffdd..c094602a9c 100644 --- a/src/machine.cpp +++ b/src/machine.cpp @@ -2715,6 +2715,17 @@ objectMonitor(Thread* t, object o, bool createNew) ENTER(t, Thread::ExclusiveState); + p = hashMapFind(t, t->m->monitorMap, o, objectHash, objectEqual); + if (p) { + if (DebugMonitors) { + fprintf(stderr, "found monitor %p for object %x\n", + static_cast(pointerValue(t, p)), + objectHash(t, o)); + } + + return static_cast(pointerValue(t, p)); + } + System::Monitor* m; System::Status s = t->m->system->make(&m); expect(t, t->m->system->success(s));