EVALUATION
http://hg.openjdk.java.net/lambda/lambda/hotspot/rev/db006a85bf91
|
|
|
EVALUATION
http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/db006a85bf91
|
|
|
EVALUATION
http://hg.openjdk.java.net/hsx/hotspot-gc/hotspot/rev/db006a85bf91
|
|
|
EVALUATION
http://hg.openjdk.java.net/hsx/hotspot-main/hotspot/rev/db006a85bf91
|
|
|
EVALUATION
http://hg.openjdk.java.net/hsx/hotspot-rt/hotspot/rev/db006a85bf91
|
|
|
EVALUATION
The assert is simply highlighting the problem - that we are using locking code (and transitively a bunch of other VM code) from a signal handler, that is potentially in a reentrant context. Even if we skip the failing assert we are still doing the wrong thing here.
|
|
|
EVALUATION
Also reproducible on Linux, I believe it is a locking problem as pointed out. I encountered the locking issue on my NMT repo.
On 1/31/2012 6:11 PM, David Holmes wrote:
> I'm looking at the decoder changes again and I don't think we can necessarily use the decoder_lock given an arbitrary failure point which could include being in the middle of using another lock. There may be guarantees and/or assertions that won't hold.
>
> Just a thought ...
>
> David
|
|
|
EVALUATION
It is something related to lock, but not ordering issue. The SGEV signal handler triggers decoder locking code, and hits following paranoid checking in
Thread::current(), as decoder is executing on signal handler thread.
inline Thread* Thread::current() {
#ifdef ASSERT
// This function is very high traffic. Define PARANOID to enable expensive
// asserts.
#ifdef PARANOID
// Signal handler should call ThreadLocalStorage::get_thread_slow()
Thread* t = ThreadLocalStorage::get_thread_slow();
assert(t != NULL && !t->is_inside_signal_handler(),
"Don't use Thread::current() inside signal handler");
#endif
#endif
Thread* thread = ThreadLocalStorage::thread();
assert(thread != NULL, "just checking");
return thread;
}
So, it is not reproducible on product build.
|
|
|