On Fri, 5 May 2023 18:38:28 GMT, Daniel Fuchs <dfu...@openjdk.org> wrote:
>> Several Handlers class use monitors to synchronize when formatting / >> publishing LogRecords. >> When logging within a VirtualThread, holding this monitor can cause the >> carrier thread to be pinned. >> Handlers could use jdk.internal.misc.InternalLock, in a similar way to some >> java.io classes (such as PrintStream) to avoid pinning the carrier thread. > > Daniel Fuchs has updated the pull request incrementally with one additional > commit since the last revision: > > Use locks consistently > > Something I was wondering: > > > Use of InternalLock can be disabled with -Djdk.io.useMonitors=true > > > But should we have a property to force the use of InternalLock (when > > enabled) even in the presence of custom handlers subclasses? We could use > > -Djdk.io.useMonitors=false to mean that - or introduce a new system > > property specific to java.util.logging.Handlers. > > If at all we want to always use an `InternalLock` irrespective of the > `-Djdk.io.useMonitors` system property, then perhaps a simpler way might be > to introduce new > > ```java > public static InternalLock newLock() > ``` > > method in `InternalLock` class, which then doesn't check the system property > and instead will always return a new lock. That way we wouldn't have to > introduce any new system property. That would also mean that we don't expose > this control to the application/user, which I think would be a good thing > since it's my opinion that this is a bit too complex detail to be configured > by the applicaiton. My concern was the opposite: do we need a property to force usage of `j.u.c.Lock` (and disable use of synchronized) even if the handler is subclassed by a custom subclass outside of the JDK? ------------- PR Comment: https://git.openjdk.org/jdk/pull/13832#issuecomment-1543514267