RFR(S) 8176363: Incorrect lock order for G1 PtrQueue related locks

Mikael Gerdin mikael.gerdin at oracle.com
Wed Mar 8 14:16:35 UTC 2017


Hi all,

Please review this change to the lock rank of the locks taken in the G1 
pre and post write barriers.

The rank of these locks have long been a problem since even though they 
are leaf locks semantically they have been ranked as "nonleaf" locks in 
the lock rank system and this has caused several issues over the years 
where a thread holding a VM mutex and attempting to write an oop would 
in some rare cases hit a deadlock warning due to it acquiring one of the 
CBL monitors.

Now this problem has come up yet again with the weak JNI handles bugfix 
where a lock rank assertion was hit yet again due to the fact that some 
code was holding a leaf lock while resolving a weak JNI handle.

I suggest that the ranks of the involved locks are changed to "leaf - 
1", allowing them to be acquired by threads holding "leaf" locks. This 
should not cause any further problems since reducing the ranks only 
allows the locks to be taken in more places. Both pairs of locks (the 
SATB and DirtyCardQ ones) have an associated FL_lock which protects a 
free list of buffers which is acquired while holding the respective CBL 
monitors but the FL_locks have the "special" lock rank and so they will 
still order correctly with the new "leaf - 1" ranks.

There is some horrible stuff going on in 
locking_enqueue_completed_buffer but I've chosen to not change that at 
this point in time even though it relates to the relative ranks of each 
pair of locks.

Testing:
JPRT, HS tiers 2 and 3 were tested with a patch to acquire the locks 
even more often than what is normal to make sure that the code was 
tested properly.
Some testing on HS tiers 4, 5 and 6 (Linux x64)
JDK tiers 1, 2 and 3

Bug: https://bugs.openjdk.java.net/browse/JDK-8176363
Webrev: http://cr.openjdk.java.net/~mgerdin/8176363/webrev.0/

Thanks
/Mikael


More information about the hotspot-dev mailing list