Thread safety problem in java.net.ProxySelector

David Lloyd david.lloyd at redhat.com
Wed Sep 2 13:16:56 UTC 2020


The default proxy selector field in java.net.ProxySelector is
essentially a global variable with no thread safety measures taken to
ensure that accesses are valid.  Anecdotally, a symptom of this bug
*may* be that the field appears `null` after assignment (based on an
IRC discussion with a confused user).

Here's the trivial fix:

diff --git a/src/java.base/share/classes/java/net/ProxySelector.java
b/src/java.base/share/classes/java/net/ProxySelector.java
index c1e97ecc981..e52c888f755 100644
--- a/src/java.base/share/classes/java/net/ProxySelector.java
+++ b/src/java.base/share/classes/java/net/ProxySelector.java
@@ -65,7 +65,7 @@ public abstract class ProxySelector {
      *
      * @see #setDefault(ProxySelector)
      */
-    private static ProxySelector theProxySelector;
+    private static volatile ProxySelector theProxySelector;

     static {
         try {


-- 
- DML • he/him



More information about the net-dev mailing list