On Wed, 12 Apr 2023 10:31:37 GMT, Serguei Spitsyn <sspit...@openjdk.org> wrote:
>> Markus Grönlund has updated the pull request incrementally with one >> additional commit since the last revision: >> >> renames > > src/hotspot/share/prims/jvmtiAgent.cpp line 323: > >> 321: assert(agent != nullptr, "invariant"); >> 322: if (!agent->is_loaded()) { >> 323: if (!load_agent_from_executable(agent, on_load_symbols, >> num_symbol_entries)) { > > It feels like I'm missing something. > We already checked and found at line 322 that `agent->is_loaded() == false`. > Also, we have the comment at line 265: > > 265 // If this function returns true, then agent->is_static_lib().&& > agent->is_loaded(). > 266 static bool load_agent_from_executable(Agent* agent, const char* > on_load_symbols[], size_t num_symbol_entries) { > > As the `agent->is_loaded() == false` then t he condition > `agent->is_static_lib() && agent->is_loaded()` has to be `false` and can not > be `true`. Then one of the if-checks at lines 322 and 323 is not needed and > can be removed. Is it right? Otherwise, the comment at line 265 can be > incorrect. Good observation, Serguei. It is because some paths call into lookup_On_load_Entry_point() twice. It is primarily the attempted conversion of xrun agents, the first invocation comes from JvmtiAgent::convert_xrun_agent(). This will have the agent "loaded". If there is an Agent_OnLoad function, the agent is converted (i.e. xrun removed). Then when the agent is to invoke the Agent_OnLoad function, there is a second invocation. Here a converted xrun library is already loaded, so I bypass attempting to load it again by checking the is_loaded() property. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/12923#discussion_r1163954754