RFR:8047290:Ensure consistent safepoint checking in MutexLockerEx
David Holmes
david.holmes at oracle.com
Thu Oct 16 00:54:39 UTC 2014
Hi Max,
This is looking good.
A few high-level initial comments:
I think SafepointAllowed should be SafepointCheckNeeded
Why are the checks in MutexLocker when the state is maintained in the
mutex itself and the mutex/monitor has lock_without_safepoint, and
wait(<safepoint checking flag>) ? I would have expected to see the check
in the mutex/monitor methods.
Checking consistent usage of the _no_safepoint_check_flag is good. But
another part of this is that a monitor/mutex that never checks for
safepoints should never be held when a thread blocks at a safepoint - is
there some way to easily check that? I was surprised how many locks are
actually not checking for safepoints.
Did you find any cases where the mutex/monitor was being used
inconsistently and incorrectly?
Did you analyse the "sometimes" cases to see if they were safe? (Aside:
just for fun check out what happens if you lock the Threads_lock with a
safepoint check and a safepoint has been requested :) ).
Cheers,
David
On 16/10/2014 4:04 AM, Max Ockner wrote:
> Hi all,
>
> I am a new member of the Hotspot runtime team in Burlington, MA.
> Please review my first fix related to safepoint checking.
>
> Summary: MutexLockerEx can either acquire a lock with or without a
> safepoint check.
> In some cases, a particular lock must either safepoint check always or
> never to avoid deadlocking.
> Some other locks have semantics which allow them to avoid deadlocks
> despite having a safepoint check only some of the time.
> All locks that are OK having inconsistent safepoint checks have been
> marked. All locks that should never safepoint check and all locks that
> should always safepoint check have also been marked.
> When a MutexLockerEx acquires a lock with or without a safepoint check,
> the lock's safepointAllowed marker is checked to ensure consistent
> safepoint checking.
>
> Webrev: http://oklahoma.us.oracle.com/~mockner/webrev/8047290/
> Bug: https://bugs.openjdk.java.net/browse/JDK-8047290
>
> Tested with:
> jprt "-testset hotspot"
> jtreg hotspot
> vm.quick.testlist
>
> Whitebox tests:
> test/runtime/Safepoint/AssertSafepointCheckConsistency1.java: Test
> expects Assert ("This lock should always have a safepoint check")
> test/runtime/Safepoint/AssertSafepointCheckConsistency2.java: Test
> expects Assert ("This lock should never have a safepoint check")
> test/runtime/Safepoint/AssertSafepointCheckConsistency3.java: code
> should not assert. (Lock is properly acquired with no safepoint check)
> test/runtime/Safepoint/AssertSafepointCheckConsistency4.java: code
> should not assert. (Lock is properly acquired with safepoint check)
>
> Thanks,
> Max
>
More information about the hotspot-dev
mailing list