< prev index next >

src/java.base/share/classes/java/net/MulticastSocket.java

Print this page
M MulticastSocket.java

*** 807,831 **** } } // synch p } //synch ttl } //method ! private static Set<SocketOption<?>> options; ! private static boolean optionsSet = false; @Override public Set<SocketOption<?>> supportedOptions() { ! synchronized (MulticastSocket.class) { ! if (optionsSet) { return options; ! } try { DatagramSocketImpl impl = getImpl(); options = Collections.unmodifiableSet(impl.supportedOptions()); ! } catch (SocketException ex) { options = Collections.emptySet(); } ! optionsSet = true; ! return options; } } } --- 807,835 ---- } } // synch p } //synch ttl } //method ! private volatile Set<SocketOption<?>> options; ! private final Object optionsLock = new Object(); @Override public Set<SocketOption<?>> supportedOptions() { ! 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 (IOException e) { options = Collections.emptySet(); } ! return this.options = options; } } }
< prev index next >