Code review request: CR 7141259 Native stack is missing in hs_err

David Holmes david.holmes at oracle.com
Thu Feb 2 19:03:15 PST 2012


On 3/02/2012 2:11 AM, Zhengyu Gu wrote:
> The cause of the problem is that decode acquires lock inside signal
> handler and generates assertion.
>
> The decoder is only used by error handler at this point, so it is safe
> to run without lock. Locking has many undesirable consequences under
> this scenario, besides signal handler issue, the error handler can be
> invoked when the thread is holding other locks, as David Holmes suggested.
>
> But it will also be used in upcoming native memory tracking code, which
> potentially can have multi-thread invoking decoder, so synchronization
> is needed.
>
> The proposed fix is to let error handler set decoder to single threaded
> mode, in which mode no lock is acquired.

The comment here:

803   // This should be the only running thread, decoder can safely run in
  804   // single threaded mode without acquiring lock
  805   Decoder::set_single_threaded(true);
  806
  807   jlong mytid = os::current_thread_id();
  808   if (first_error == NULL &&
  809       Atomic::cmpxchg_ptr(this, &first_error, NULL) == NULL) {
  810
  811     // first time
  812     first_error_tid = mytid;
  813     set_error_reported();

isn't quite correct as at this stage you can have multiple threads 
trying to do report_and_die(). So at least move it inside the if block.

Later when there are multiple users of the Decoder I don't know how you 
will fix this because those other users can run concurrently with 
report_and_die(). That said I'm unclear what it is about the Decoder 
that requires locking - what state does it maintain? Is there a reason 
not to create a Decoder only when needed?

---

In decoder.cpp you can still use MutexLockerEx and as it will take a 
null mutex and just act as a no-op eg:

   MutexLockerEx locker( _single_thread ? NULL : _decoder_lock, true);

Cheers,
David
-----

>
> Please review
> Webrev: http://cr.openjdk.java.net/~zgu/7141259/webrev.00/
>
>
> Thanks,
>
> -Zhengyu
>


More information about the hotspot-dev mailing list