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

Reply via email to