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