diff -Naur otp_src_R12B-0/erts/emulator/beam/erl_process_lock.c otp_src_R12B-0_OTP-7080/erts/emulator/beam/erl_process_lock.c --- otp_src_R12B-0/erts/emulator/beam/erl_process_lock.c 2007-11-26 20:01:40.000000000 +0100 +++ otp_src_R12B-0_OTP-7080/erts/emulator/beam/erl_process_lock.c 2008-01-03 13:34:15.071955000 +0100 @@ -494,8 +494,12 @@ wflgs = need_locks << ERTS_PROC_LOCK_WAITER_SHIFT; olflgs = ERTS_PROC_LOCK_FLGS_BOR_(&p->lock, need_locks); - if ((olflgs & (wflgs | need_locks)) == 0) + if ((olflgs & (wflgs | need_locks)) == 0) { +#if !ERTS_PROC_LOCK_ATOMIC_IMPL + erts_pix_unlock(pix_lock); +#endif return; /* got them all */ + } spin_count--; #if !ERTS_PROC_LOCK_ATOMIC_IMPL erts_pix_unlock(pix_lock);