RFR: 8329103: assert(!thread->in_asgct()) failed during multi-mode profiling

Serguei Spitsyn sspitsyn at openjdk.org
Fri Mar 29 05:58:31 UTC 2024


On Wed, 27 Mar 2024 01:02:41 GMT, Andrei Pangin <apangin at openjdk.org> wrote:

> This fix makes `AsyncGetCallTrace` reentrant and async-signal-safe.
> Reentrancy is required in the cases when two or more profiling engines are running at the same time, e.g., when CPU and Wall clock profilers work together and therefore one profiler may interrupt another in the middle of getting a stack trace.
> 
> Tested with async-profiler:
> 
> java -agentpath:/path/to/libasyncProfiler.so=start,event=cpu,interval=1ms,wall=1ms,file=profile.jfr

Marked as reviewed by sspitsyn (Reviewer).

src/hotspot/share/runtime/thread.hpp line 664:

> 662:   ThreadInAsgct(Thread* thread) : _thread(thread) {
> 663:     assert(thread != nullptr, "invariant");
> 664:     // AsyncGetCallTrace is reentrant - save the previous state.

Nit: It is possible to rephrase this comment as follows:

  // Allow AsyncGetCallTrace to be reentrant - save the previous state.
``

-------------

PR Review: https://git.openjdk.org/jdk/pull/18504#pullrequestreview-1967889766
PR Review Comment: https://git.openjdk.org/jdk/pull/18504#discussion_r1544102770


More information about the hotspot-runtime-dev mailing list