< prev index next >

src/hotspot/cpu/zero/cppInterpreter_zero.cpp

Print this page

        

*** 271,286 **** BasicObjectLock *monitor; monitor = NULL; if (method->is_synchronized()) { monitor = (BasicObjectLock*) istate->stack_base(); oop lockee = monitor->obj(); ! markWord disp = lockee->mark()->set_unlocked(); monitor->lock()->set_displaced_header(disp); ! if (lockee->cas_set_mark((markWord)monitor, disp) != disp) { ! if (thread->is_lock_owned((address) disp->clear_lock_bits())) { ! monitor->lock()->set_displaced_header(NULL); } else { CALL_VM_NOCHECK(InterpreterRuntime::monitorenter(thread, monitor)); if (HAS_PENDING_EXCEPTION) goto unwind_and_return; --- 271,286 ---- BasicObjectLock *monitor; monitor = NULL; if (method->is_synchronized()) { monitor = (BasicObjectLock*) istate->stack_base(); oop lockee = monitor->obj(); ! markWord disp = lockee->mark().set_unlocked(); monitor->lock()->set_displaced_header(disp); ! if (lockee->cas_set_mark(markWord::from_pointer(monitor), disp) != disp) { ! if (thread->is_lock_owned((address) disp.clear_lock_bits().to_pointer())) { ! monitor->lock()->set_displaced_header(markWord::from_pointer(NULL)); } else { CALL_VM_NOCHECK(InterpreterRuntime::monitorenter(thread, monitor)); if (HAS_PENDING_EXCEPTION) goto unwind_and_return;
*** 415,425 **** BasicLock *lock = monitor->lock(); markWord header = lock->displaced_header(); oop rcvr = monitor->obj(); monitor->set_obj(NULL); ! if (header != NULL) { markWord old_header = markWord::encode(lock); if (rcvr->cas_set_mark(header, old_header) != old_header) { monitor->set_obj(rcvr); { HandleMark hm(thread); CALL_VM_NOCHECK(InterpreterRuntime::monitorexit(thread, monitor)); --- 415,425 ---- BasicLock *lock = monitor->lock(); markWord header = lock->displaced_header(); oop rcvr = monitor->obj(); monitor->set_obj(NULL); ! if (header.to_pointer() != NULL) { markWord old_header = markWord::encode(lock); if (rcvr->cas_set_mark(header, old_header) != old_header) { monitor->set_obj(rcvr); { HandleMark hm(thread); CALL_VM_NOCHECK(InterpreterRuntime::monitorexit(thread, monitor));
< prev index next >