< 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 >