On Mon, 26 May 2025 06:32:03 GMT, Johannes Bechberger <jbechber...@openjdk.org> wrote:
>> src/hotspot/share/jfr/periodic/sampling/jfrCPUTimeThreadSampler.cpp line 200: >> >>> 198: void sample_thread(JfrSampleRequest& request, void* ucontext, >>> JavaThread* jt, JfrThreadLocal* tl); >>> 199: >>> 200: // sample all marked threads out of safepoint >> >> What is meant by "out of safepoint"? > > Stack walking that occurs not at a safepoint, but during longer periods of a > thread being in native. We can't walk the stack directly when we're in > native, as we can't properly walk stacks in signal handlers. So we defer this > to a separate thread. A thread in native is still stackwalked at a safe location, a safepoint code position. It's guaranteed by the last java frame (ljf). >> src/hotspot/share/jfr/periodic/sampling/jfrCPUTimeThreadSampler.cpp line 373: >> >>> 371: } >>> 372: } >>> 373: assert(first_index == 0, "invariant"); >> >> How is this possible? > > Because we have a safepoint before the thread goes into native (as far as I > understand). I'll remove the code above, because it is therefore not needed. There is no safepoint when a thread goes from Java to native. It's done on the way back. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/25302#discussion_r2106808431 PR Review Comment: https://git.openjdk.org/jdk/pull/25302#discussion_r2106814829