You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by re...@apache.org on 2009/10/13 11:33:32 UTC

svn commit: r824652 - /harmony/enhanced/classlib/trunk/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/SelectorImpl.java

Author: regisxu
Date: Tue Oct 13 09:33:31 2009
New Revision: 824652

URL: http://svn.apache.org/viewvc?rev=824652&view=rev
Log:
revert r824625 which is incorrect and apply new fix of countdown "selected" if selected keys are canncelled.

Modified:
    harmony/enhanced/classlib/trunk/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/SelectorImpl.java

Modified: harmony/enhanced/classlib/trunk/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/SelectorImpl.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/SelectorImpl.java?rev=824652&r1=824651&r2=824652&view=diff
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/SelectorImpl.java (original)
+++ harmony/enhanced/classlib/trunk/modules/nio/src/main/java/common/org/apache/harmony/nio/internal/SelectorImpl.java Tue Oct 13 09:33:31 2009
@@ -494,12 +494,23 @@
 
                     Arrays.fill(flags, 0);
 
-                    doCancel();
-
-                    if (selected != 0) {
-                        return selectedKeys.size();
+                    Set<SelectionKey> cancelledKeys = cancelledKeys();
+                    synchronized (cancelledKeys) {
+                        if (cancelledKeys.size() > 0) {
+                            for (SelectionKey currentkey : cancelledKeys) {
+                                delKey(currentkey);
+                                mutableKeys.remove(currentkey);
+                                deregister((AbstractSelectionKey) currentkey);
+                                if (mutableSelectedKeys.remove(currentkey)) {
+                                    selected--;
+                                }
+                            }
+                            cancelledKeys.clear();
+                        }
+                        limitCapacity();
                     }
-                    return 0;
+
+                    return selected;
                 }
             }
         }