From 3e21c7a7555a3173b2bdcd6b0de8ad07d007c72a Mon Sep 17 00:00:00 2001 From: Trustin Lee Date: Thu, 18 Feb 2010 02:32:56 +0000 Subject: [PATCH] Catch CancelledKeyException from Selector.select() --- .../channel/socket/nio/NioDatagramWorker.java | 2 +- .../netty/channel/socket/nio/NioWorker.java | 2 +- .../channel/socket/nio/SelectorUtil.java | 44 +++++++++++++++++++ 3 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 src/main/java/org/jboss/netty/channel/socket/nio/SelectorUtil.java diff --git a/src/main/java/org/jboss/netty/channel/socket/nio/NioDatagramWorker.java b/src/main/java/org/jboss/netty/channel/socket/nio/NioDatagramWorker.java index 1e4ee433ad..fa59d488e2 100644 --- a/src/main/java/org/jboss/netty/channel/socket/nio/NioDatagramWorker.java +++ b/src/main/java/org/jboss/netty/channel/socket/nio/NioDatagramWorker.java @@ -220,7 +220,7 @@ class NioDatagramWorker implements Runnable { } try { - selector.select(500); + SelectorUtil.select(selector); // 'wakenUp.compareAndSet(false, true)' is always evaluated // before calling 'selector.wakeup()' to reduce the wake-up diff --git a/src/main/java/org/jboss/netty/channel/socket/nio/NioWorker.java b/src/main/java/org/jboss/netty/channel/socket/nio/NioWorker.java index 6893a9bdc6..86e2165213 100644 --- a/src/main/java/org/jboss/netty/channel/socket/nio/NioWorker.java +++ b/src/main/java/org/jboss/netty/channel/socket/nio/NioWorker.java @@ -158,7 +158,7 @@ class NioWorker implements Runnable { } try { - selector.select(500); + SelectorUtil.select(selector); // 'wakenUp.compareAndSet(false, true)' is always evaluated // before calling 'selector.wakeup()' to reduce the wake-up diff --git a/src/main/java/org/jboss/netty/channel/socket/nio/SelectorUtil.java b/src/main/java/org/jboss/netty/channel/socket/nio/SelectorUtil.java new file mode 100644 index 0000000000..cc046acc80 --- /dev/null +++ b/src/main/java/org/jboss/netty/channel/socket/nio/SelectorUtil.java @@ -0,0 +1,44 @@ +/* + * Copyright 2009 Red Hat, Inc. + * + * Red Hat licenses this file to you under the Apache License, version 2.0 + * (the "License"); you may not use this file except in compliance with the + * License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package org.jboss.netty.channel.socket.nio; + +import java.io.IOException; +import java.nio.channels.CancelledKeyException; +import java.nio.channels.Selector; + +import org.jboss.netty.logging.InternalLogger; +import org.jboss.netty.logging.InternalLoggerFactory; + +/** + * @author The Netty Project + * @author Trustin Lee + * @version $Rev$, $Date$ + */ +final class SelectorUtil { + private static final InternalLogger logger = + InternalLoggerFactory.getInstance(SelectorUtil.class); + + static void select(Selector selector) throws IOException { + try { + selector.select(500); + } catch (CancelledKeyException e) { + // Harmless exception - log anyway + logger.debug( + CancelledKeyException.class.getSimpleName() + + " raised by a Selector - JDK bug?", e); + } + } +}