jdk/src/share/classes/sun/nio/ch/NativeThreadSet.java
changeset 11909 a1a7165ac1fa
parent 9687 e41f9c6d9c0d
child 14342 8435a30053c1
--- a/jdk/src/share/classes/sun/nio/ch/NativeThreadSet.java	Mon Feb 20 11:24:06 2012 +0800
+++ b/jdk/src/share/classes/sun/nio/ch/NativeThreadSet.java	Mon Feb 20 18:55:10 2012 +0000
@@ -44,8 +44,9 @@
     //
     int add() {
         long th = NativeThread.current();
-        if (th == -1)
-            return -1;
+        // 0 and -1 are treated as placeholders, not real thread handles
+        if (th == 0)
+            th = -1;
         synchronized (this) {
             int start = 0;
             if (used >= elts.length) {
@@ -71,8 +72,6 @@
     // Removes the thread at the given index.
     //
     void remove(int i) {
-        if (i < 0)
-            return;
         synchronized (this) {
             elts[i] = 0;
             used--;
@@ -91,7 +90,8 @@
                 long th = elts[i];
                 if (th == 0)
                     continue;
-                NativeThread.signal(th);
+                if (th != -1)
+                    NativeThread.signal(th);
                 if (--u == 0)
                     break;
             }