check again for entry in monitorMap after entering the exclusive state in objectMonitor() in case another thread beat us to creating a monitor for the object

This commit is contained in:
Joel Dice 2007-11-29 08:03:45 -07:00
parent d24b633665
commit d8374a76e2

View File

@ -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<System::Monitor*>(pointerValue(t, p)),
objectHash(t, o));
}
return static_cast<System::Monitor*>(pointerValue(t, p));
}
System::Monitor* m;
System::Status s = t->m->system->make(&m);
expect(t, t->m->system->success(s));