I had a very strange syntax error when attempting to use ThreadLocal
in a CNI program.  It turns out that ThreadLocal has a field called
NULL, and this is distinct from Java's null.  Eww...

Andrew.


2006-10-12  Andrew Haley  <[EMAIL PROTECTED]>

        * java/lang/InheritableThreadLocal.java: Rename NULL to sentinel.
        * java/lang/ThreadLocal.java: Likewise.

Index: ThreadLocal.java
===================================================================
RCS file: /cvsroot/classpath/classpath/java/lang/ThreadLocal.java,v
retrieving revision 1.4.2.8
diff -u -r1.4.2.8 ThreadLocal.java
--- ThreadLocal.java    10 Jan 2006 15:59:40 -0000      1.4.2.8
+++ ThreadLocal.java    12 Oct 2006 12:51:12 -0000
@@ -93,7 +93,7 @@
    * user. Do not expose this to the public. Package visible for use by
    * InheritableThreadLocal
    */
-  static final Object NULL = new Object();
+  static final Object sentinel = new Object();
 
   /**
    * Creates a ThreadLocal object without associating any value to it yet.
@@ -132,9 +132,9 @@
     if (value == null)
       {
         value = initialValue();
-        map.put(this, (T) (value == null ? NULL : value));
+        map.put(this, (T) (value == null ? sentinel : value));
       }
-    return value == (T) NULL ? null : value;
+    return value == (T) sentinel ? null : value;
   }
 
   /**
@@ -150,7 +150,7 @@
     Map map = Thread.getThreadLocals();
     // Note that we don't have to synchronize, as only this thread will
     // ever modify the map.
-    map.put(this, value == null ? NULL : value);
+    map.put(this, value == null ? sentinel : value);
   }
 
   /**
Index: InheritableThreadLocal.java
===================================================================
RCS file: /cvsroot/classpath/classpath/java/lang/InheritableThreadLocal.java,v
retrieving revision 1.7.2.7
diff -u -r1.7.2.7 InheritableThreadLocal.java
--- InheritableThreadLocal.java 10 Jan 2006 15:59:40 -0000      1.7.2.7
+++ InheritableThreadLocal.java 12 Oct 2006 12:51:12 -0000
@@ -107,12 +107,12 @@
               {
                InheritableThreadLocal local = (InheritableThreadLocal)key;
                 Object parentValue = parentThread.locals.get(key);
-               Object childValue = local.childValue(parentValue == NULL
+               Object childValue = local.childValue(parentValue == sentinel
                                                ? null : parentValue);
                 if (childThread.locals == null)
                     childThread.locals = new WeakIdentityHashMap();
                 childThread.locals.put(key, (childValue == null
-                                             ? NULL : childValue));
+                                             ? sentinel : childValue));
               }
           }
       }

Reply via email to