On Fri, 24 Nov 2023 13:00:33 GMT, Jaikiran Pai <j...@openjdk.org> wrote:

>> Can I please get a review of this change which proposes to fix the issue 
>> noted in https://bugs.openjdk.org/browse/JDK-8320687?
>> 
>> As noted in the issue, the 
>> `sun.jvmstat.monitor.MonitoredHost.getMonitoredHost()` uses a shared 
>> instance of `java.util.ServiceLoader` to load `MonitoredHostService` 
>> services. The `ServiceLoader` class javadoc explicitly notes that it isn't 
>> thread safe. The issue at hand is caused to due using an instance of 
>> `ServiceLoader` concurrently by multiple threads.
>> 
>> The fix proposes to guard the usage of the shared `ServiceLoader` instance 
>> through the `monitoredHosts` object monitor. We already use that monitor 
>> when dealing with the internal cache which is populated after loading the 
>> relevant `MonitoredHostService`(s).
>> 
>> A new jtreg test has been introduced which always reproduces the issue 
>> without the source changes and passes with this fix.
>> 
>> tier1, tier2, tier3 and svc_tools tests have been run with this change and 
>> all passed.
>
> Jaikiran Pai has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   Alan's suggestion - don't share ServiceLoader

Marked as reviewed by alanb (Reviewer).

src/jdk.internal.jvmstat/share/classes/sun/jvmstat/monitor/MonitoredHost.java 
line 170:

> 168:                 break;
> 169:             }
> 170:         }

Alternatively, you can do it more succulently with a stream:


MonitoredHost mh = ServiceLoader.load(MonitoredHostService.class,
                                                  
MonitoredHostService.class.getClassLoader())
                    .stream()
                    .map(ServiceLoader.Provider::get)
                    .filter(mhs -> mhs.getScheme().equals(hostId.getScheme()))
                    .map(mhs -> mhs.getMonitoredHost(hostId))
                    .findAny()
                    .orElse(null);

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

PR Review: https://git.openjdk.org/jdk/pull/16805#pullrequestreview-1748045810
PR Review Comment: https://git.openjdk.org/jdk/pull/16805#discussion_r1404414161

Reply via email to