On Thu, 2 May 2024 03:57:42 GMT, Jaikiran Pai <j...@openjdk.org> wrote:

>> test/hotspot/jtreg/serviceability/tmtools/jstack/DaemonThreadTest.java line 
>> 77:
>> 
>>> 75:             t.setDaemon(false);
>>> 76:         }
>>> 77:         testThread(t, "");
>> 
>> I think the following is a bit clearer:
>> 
>> 
>> // Virtual threads are always daemon threads. Therefore if the current 
>> thread is a
>> // virtual thread, then NormalThread will be a daemon thread and we need to 
>> explicitly
>> // make it not a daemon thread.
>> 
>> 
>> You don't actually need the isVirtual() check, especially with the comment 
>> explaining things. However, you could also forgo all this logic and the 
>> comment by just sticking setDaemon(false) in the NormalThread constructor.
>
> Done - I've updated the PR to just call `setDaemon(false)`  from the 
> constructor of `NormalThread` instead of this conditional logic.
> 
> When I initially added this logic, I was trying to avoid doing any changes 
> that could impact the testing when running under platform threads. But 
> thinking about this test's context, it merely wants to verify that the jstack 
> output correctly presents daemon/non-daemon status, so explicitly setting a 
> "normal" thread to non-daemon shouldn't impact what this test was originally 
> verifying.

Yes, I also briefly wondered if somehow this would be subverting the testing of 
whether the thread was not daemon by default, but that's not what is being 
tested here.

>> test/jdk/sun/tools/jstack/BasicJStackTest.java line 53:
>> 
>>> 51:             // print the stacktraces of virtual threads.
>>> 52:             throw new SkippedException("skipping test since current 
>>> thread is a virtual thread");
>>> 53:         }
>> 
>> I wonder if we can rely on the virtual thread always be mounted. If so, we 
>> could revisit this test after 
>> [JDK-8330846](https://bugs.openjdk.org/browse/JDK-8330846) is implemented.
>
> Hello Chris, if I understand that JBS issue correctly, then by default jstack 
> (and other tools) will start including stacktraces of virtual threads that 
> currently are mounted on a carrier thread (and thus haven't been parked) in 
> the output.
> 
> If that's the case, then I think when that JBS issue is implemented we can 
> remove this conditional check and the skipping of the test since the virtual 
> thread would end up appearing in the thread dump because that's the thread 
> which would be currently launching the `jstack` process and waiting (through 
> a `ReentrantLock`'s `Condition` object) for the jstack process to complete.
> 
> To revisit this test when JDK-8330846 is implemented, do you want me to file 
> an issue? Or did you mean we should wait doing the changes in this PR until 
> JDK-8330846 is implemented?

I think just noting this in 
[JDK-8330846](https://bugs.openjdk.org/browse/JDK-8330846) should be good 
enough.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/19016#discussion_r1588463768
PR Review Comment: https://git.openjdk.org/jdk/pull/19016#discussion_r1588462528

Reply via email to