(XS) RFR: 8152849: share/vm/runtime/mutex.cpp:1161 assert(((uintptr_t(_owner))|(uintptr_t(_LockWord.FullWord))|(uintptr_t(_EntryList))|(uintptr_t(_WaitSet))|(uintptr_t(_OnDeck))) == 0) failed

Daniel D. Daugherty daniel.daugherty at oracle.com
Wed Aug 17 12:59:02 UTC 2016


On 8/17/16 1:45 AM, David Holmes wrote:
> Bug: https://bugs.openjdk.java.net/browse/JDK-8152849
>
> webrev: http://cr.openjdk.java.net/~dholmes/8152849/webrev/

src/share/vm/runtime/mutex.cpp
     If the problem is a racy clearing of one of the fields, then the
     assert can still fire and the extra info might still show zeroes
     since they are two different queries of the fields.

     For this diagnostic to be always accurate you need to save a copy
     of each field, assert() that all the copies or'ed together are == 0,
     and have the extra info printed from the copies.

Dan


>
> This is a rare assertion failure that has proven to unreproducible 
> even by directly trying to exercise the theoretical race conditions 
> mentioned in the bug report. All I can do for now is augment the 
> assert to print out the various values so we can at least see where 
> things are failing, next time it happens.
>
> Example output:
>
> #  Internal Error 
> (/scratch/dh198349/jdk9-hs/hotspot/src/share/vm/runtime/mutex.cpp:1157), 
> pid=21732, tid=21734
> # 
> assert(((uintptr_t(_owner))|(uintptr_t(_LockWord.FullWord))|(uintptr_t(_EntryList))|(uintptr_t(_WaitSet))|(uintptr_t(_OnDeck))) 
> == 0) failed: 
> _owner(0x0000000000000000)|_LockWord(0x0000000000000000)|_EntryList(0x0000000000000000)|_WaitSet(0x0000000000000000)|_OnDeck(0x00000000deaddead) 
> != 0
>
> Thanks,
> David



More information about the hotspot-runtime-dev mailing list