On Tue, 28 Nov 2023 05:08:58 GMT, Serguei Spitsyn <sspit...@openjdk.org> wrote:
>> src/hotspot/share/prims/jvmtiThreadState.inline.hpp line 98: >> >>> 96: state->get_thread_oop() != thread_oop)) { >>> 97: // Check if java_lang_Thread already has a link to the >>> JvmtiThreadState. >>> 98: if (thread_oop != nullptr) { // thread_oop can be null during >>> early VMStart. >> >> This comment is another case of `state->get_thread_oop()` being null. We >> should merge this comment with the new comment about attaching native thread. > > This also was caught by my eyes. :) > With the lines 99-101 in place the only case when `thread_oop` can be equal > to `nullptr` is when `thread->threadObj() == nullptr`. My understanding is > that it can be for a detached thread only. > I would suggest to add an assert after the line 101: ` assert(thread_oop != > nullptr, "sanity check");` > Full testing with this assert should help to identify if it can be fired. If > such cases are found then they need to be fixed. Then we can remove the check > at the line 104. > The `JvmtiThreadState` constructor also allows for `thread_oop` to be > `nullptr`. > Some cleanup will be needed to get rid of unneeded checks there as well. @sspitsyn For the above suggestions, it seems cleaner/safer to handle the clean-ups in a separate RFE with full testing including the vthread cases. There are additional comments in https://github.com/openjdk/jdk/pull/16642#issuecomment-1815379890 related to this as well. Those could be handled together and require through testing including the vthread support. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/16642#discussion_r1408228229