On Tue, 20 Oct 2020 07:12:01 GMT, Robbin Ehn <r...@openjdk.org> wrote:
>> Hi Robbin, >> >> IIUC the "waiting" part of `wait_for_ext_suspend_completion` is now >> implicitly handled in the handshake - correct? >> >> Overall this seems like a great simplification. >> >> A few minor comments below. >> >> Thanks, >> David > > Hi David, thanks for having a look. > >> Hi Robbin, >> >> IIUC the "waiting" part of `wait_for_ext_suspend_completion` is now >> implicitly handled in the handshake - correct? > > A suspended Java thread may never transition back to java, never execute any > more bytecodes. > The old 'fully' suspended gives more guarantees which we need to do some > operations. > When we are in a handshake, the handshake gives us those guarantees, so it is > enough that thread is considered > suspended. > So the answer is we wait until we are allowed to execute those operations > (thread handshake safe), which is not > identical with fully suspended. But fully suspended is an implementation > detail, the agent only knows about suspended. >> >> Overall this seems like a great simplification. >> >> A few minor comments below. >> >> Thanks, >> David > Not clear to me this is so generic that it applies to Handshake::execute > rather than being part of the operation. ?? We only have two other cases (other than JVM TI where we always do this). This one, async exception: if (thread == receiver) { // Exception is getting thrown at self so no VM_Operation needed. THROW_OOP(java_throwable); } else { // Use a VM_Operation to throw the exception. Thread::send_async_exception(java_thread, java_throwable); } And biased locking revoke where we don't do this, because it makes no sense revoking a lock if you have the bias :) In that case we could assert we never try to revoke a self owned bias. ------------- PR: https://git.openjdk.java.net/jdk/pull/729