< prev index next >
src/java.base/share/classes/java/net/MulticastSocket.java
Print this page
M MulticastSocket.java
@@ -807,25 +807,29 @@
}
} // synch p
} //synch ttl
} //method
- private static Set<SocketOption<?>> options;
- private static boolean optionsSet = false;
+ private volatile Set<SocketOption<?>> options;
+ private final Object optionsLock = new Object();
@Override
public Set<SocketOption<?>> supportedOptions() {
- synchronized (MulticastSocket.class) {
- if (optionsSet) {
+ Set<SocketOption<?>> options = this.options;
+ if (options != null)
return options;
- }
+
+ synchronized (optionsLock) {
+ options = this.options;
+ if (options != null)
+ return options;
+
try {
DatagramSocketImpl impl = getImpl();
options = Collections.unmodifiableSet(impl.supportedOptions());
- } catch (SocketException ex) {
+ } catch (IOException e) {
options = Collections.emptySet();
}
- optionsSet = true;
- return options;
+ return this.options = options;
}
}
}
< prev index next >