On Thu, 24 Sep 2020 06:54:32 GMT, Robbin Ehn <r...@openjdk.org> wrote:

>> Hi Robbin,
>> I've looked more at the Serviceability files.
>> The fix looks good in general. Nice refactoring and simplification with the 
>> JvmtiHandshakeClosure.
>> It is a little unexpected that the do_thread can be executed by 
>> non-JavaThread's.
>> Not sure, what kinds of inconvenience it can cause.
>> Also, adding the _completed field is somewhat inconsistent.
>> I'd expect it to be present or not present for almost all JVMTI handshake 
>> closures.
>> I hope, you can comment on why it was added in these particular cases.
>
> Hi Serguei,
> 
>> Hi Robbin,
>> I've looked more at the Serviceability files.
>> The fix looks good in general. Nice refactoring and simplification with the 
>> JvmtiHandshakeClosure.
> 
> Good.
> 
>> It is a little unexpected that the do_thread can be executed by 
>> non-JavaThread's.
>> Not sure, what kinds of inconvenience it can cause.
> 
> Reading the code I did not find any issues.
> Any return values must already be allocated correctly since the executor 
> thread do not wait around.
> Thus targeted thread must be the owner of these.
> Also extensive testing find no issues.
> But as I said to David, we can easily change back to the previous behavior if 
> needed by using the filter mechanism.
> 
>> Also, adding the _completed field is somewhat inconsistent.
>> I'd expect it to be present or not present for almost all JVMTI handshake 
>> closures.
>> I hope, you can comment on why it was added in these particular cases.
> 
> Two of the handshakes have guarantee checks:
> https://github.com/openjdk/jdk/blob/94daf2c7566d882c46cb87b8c28017812bf722ef/src/hotspot/share/prims/jvmtiEnvThreadState.cpp#L326
> https://github.com/openjdk/jdk/blob/94daf2c7566d882c46cb87b8c28017812bf722ef/src/hotspot/share/prims/jvmtiEventController.cpp#L345
> 
> This is the only placed it is used/needed.
> In my previous version I just removed those guarantee because they needed 
> extra code and was suspicious to me.
> But it was requested to add them back.
> 
> I had quick look now, and from what I can tell it is not guaranteed that we 
> do execute those handshake.
> We do not run handshakes on exiting threads (is_terminated()), we set is 
> exiting here:
> https://github.com/openjdk/jdk/blob/94daf2c7566d882c46cb87b8c28017812bf722ef/src/hotspot/share/runtime/thread.cpp#L2123
> But we remove the JVM TI Thread state way later, here:
> https://github.com/openjdk/jdk/blob/94daf2c7566d882c46cb87b8c28017812bf722ef/src/hotspot/share/runtime/thread.cpp#L2207
> 
> For example the method ensure_join() which is between set_terminated and 
> removing the JVM TI state can
> safepoint/handshake.
> https://github.com/openjdk/jdk/blob/94daf2c7566d882c46cb87b8c28017812bf722ef/src/hotspot/share/runtime/thread.cpp#L2159
> That would trigger the guarantee.
> 
> So I believe we should not have those two guarantees and thus the _completed 
> can be removed once again.
> I think that should be handled in a separate issue, leaving this as is for 
> now.

Added comment @dholmes-ora
Added constructor @dholmes-ora
Previous renames caused confusing, renamed some methods and moved those not 
public to private

Running tests

Good to go?

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

PR: https://git.openjdk.java.net/jdk/pull/151

Reply via email to