On Wed, 14 Aug 2024 20:53:33 GMT, Markus Grönlund <mgron...@openjdk.org> wrote:

> Greetings,
> 
> Explicitly pin a virtual thread before acquiring the JFR string pool monitor 
> because migrating a carrier thread local event writer object onto another 
> carrier thread is impossible.
> 
> During event commit, the thread is in a critical section because it has 
> loaded a carrier thread local event writer object. For virtual threads, a 
> contended monitor, such as a synchronized block, is a point where a thread 
> could become unmounted.
> 
> A monitor guards the JFR string pool, but remounting a virtual thread onto 
> another carrier is impossible because of the event writer.
> 
> Therefore, it's imperative to use explicit pin constructs to prevent 
> unmounting at this location. 
> 
> Testing: jdk_jfr
> 
> Thanks
> Markus

Changes requested by dholmes (Reviewer).

src/jdk.jfr/share/classes/jdk/jfr/internal/StringPool.java line 93:

> 91:     private static long storeString(String s) {
> 92:         try {
> 93:             pinVirtualThread();

The pin should be outside the try so that the finally can only happen if 
pinning was succesful.

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

PR Review: https://git.openjdk.org/jdk/pull/20588#pullrequestreview-2239597266
PR Review Comment: https://git.openjdk.org/jdk/pull/20588#discussion_r1717852378

Reply via email to