You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ad...@apache.org on 2004/05/02 01:16:22 UTC
cvs commit: incubator-geronimo/modules/network/src/java/org/apache/geronimo/network SelectorManager.java
adc 2004/05/01 16:16:22
Modified: modules/network/src/java/org/apache/geronimo/network
SelectorManager.java
Log:
Put in work-around for NPE from NIO impl.
SelectorManager will now not stop when a key is canceled.
Revision Changes Path
1.7 +51 -37 incubator-geronimo/modules/network/src/java/org/apache/geronimo/network/SelectorManager.java
Index: SelectorManager.java
===================================================================
RCS file: /home/cvs/incubator-geronimo/modules/network/src/java/org/apache/geronimo/network/SelectorManager.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- SelectorManager.java 25 Apr 2004 02:03:37 -0000 1.6
+++ SelectorManager.java 1 May 2004 23:16:22 -0000 1.7
@@ -129,49 +129,52 @@
log.debug("Selector Work thread has started.");
log.debug("Selector Manager timeout: "+timeout);
while (running) {
+ try {
- synchronized (guard) { /* do nothing */
- log.trace("Waiting for selector to return.");
- }
-
- if (selector.select(timeout) == 0) continue;
-
- // Get a java.util.Set containing the SelectionKey objects for
- // all channels that are ready for I/O.
- Set keys = selector.selectedKeys();
-
- // Use a java.util.Iterator to loop through the selected keys
- for (Iterator i = keys.iterator(); i.hasNext();) {
- final SelectionKey key = (SelectionKey) i.next();
-
- if (key.isReadable()) {
- log.trace("-OP_READ " + key);
- key.interestOps(key.interestOps() & (~SelectionKey.OP_READ));
- }
- if (key.isWritable()) {
- log.trace("-OP_WRITE " + key);
- key.interestOps(key.interestOps() & (~SelectionKey.OP_WRITE));
- }
- if (key.isAcceptable()) {
- log.trace("-OP_ACCEPT " + key);
- key.interestOps(key.interestOps() & (~SelectionKey.OP_ACCEPT));
+ synchronized (guard) { /* do nothing */
+ log.trace("Waiting for selector to return.");
}
- threadPool.getWorkManager().execute(new Runnable() {
- public void run() {
- try {
- ((SelectionEventListner) key.attachment()).selectionEvent(key);
- } catch (Throwable e) {
- log.trace("Request Failed.", e);
- }
+ if (selector.select(timeout) == 0) continue;
+
+ // Get a java.util.Set containing the SelectionKey objects for
+ // all channels that are ready for I/O.
+ Set keys = selector.selectedKeys();
+
+ // Use a java.util.Iterator to loop through the selected keys
+ for (Iterator i = keys.iterator(); i.hasNext();) {
+ final SelectionKey key = (SelectionKey) i.next();
+
+ if (key.isReadable()) {
+ log.trace("-OP_READ " + key);
+ key.interestOps(key.interestOps() & (~SelectionKey.OP_READ));
+ }
+ if (key.isWritable()) {
+ log.trace("-OP_WRITE " + key);
+ key.interestOps(key.interestOps() & (~SelectionKey.OP_WRITE));
}
- });
+ if (key.isAcceptable()) {
+ log.trace("-OP_ACCEPT " + key);
+ key.interestOps(key.interestOps() & (~SelectionKey.OP_ACCEPT));
+ }
+
+ threadPool.getWorkManager().execute(new Runnable() {
+ public void run() {
+ try {
+ ((SelectionEventListner) key.attachment()).selectionEvent(key);
+ } catch (Throwable e) {
+ log.trace("Request Failed.", e);
+ }
+ }
+ });
- i.remove(); // Remove the key from the set of selected keys
+ i.remove(); // Remove the key from the set of selected keys
+ }
+
+ } catch (CancelledKeyException e) {
+ log.debug("Key has Been Cancelled: "+e);
}
}
- } catch (CancelledKeyException e) {
- log.debug("Key has Been Cancelled: "+e);
} catch (IOException e) {
log.warn("IOException occured.", e);
} catch (InterruptedException e) {
@@ -188,12 +191,23 @@
return key;
}
}
+ public void closeChannel(SelectableChannel selectableChannel) throws IOException {
+ synchronized (guard) {
+ selector.wakeup();
+ selectableChannel.keyFor(selector).cancel();
+ selectableChannel.close();
+ }
+ }
public void addInterestOps(SelectionKey selectorKey, int addOpts) {
synchronized (guard) {
selector.wakeup();
selectorKey.interestOps( selectorKey.interestOps() | addOpts );
}
+ }
+
+ public void wakeup() {
+ selector.wakeup();
}
public void setGBeanContext(GBeanContext context) {