View Javadoc

    1   /*
    2    * Copyright 2012 The Netty Project
    3    *
    4    * The Netty Project licenses this file to you under the Apache License,
    5    * version 2.0 (the "License"); you may not use this file except in compliance
    6    * with the License. You may obtain a copy of the License at:
    7    *
    8    *   http://www.apache.org/licenses/LICENSE-2.0
    9    *
    10   * Unless required by applicable law or agreed to in writing, software
    11   * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
    12   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
    13   * License for the specific language governing permissions and limitations
    14   * under the License.
    15   */
    16  package org.jboss.netty.channel.socket.nio;
    17
    18  import java.io.IOException;
    19  import java.nio.channels.CancelledKeyException;
    20  import java.nio.channels.Selector;
    21
    22  import org.jboss.netty.logging.InternalLogger;
    23  import org.jboss.netty.logging.InternalLoggerFactory;
    24
    25  final class SelectorUtil {
    26      private static final InternalLogger logger =
    27          InternalLoggerFactory.getInstance(SelectorUtil.class);
    28
    29      static final int DEFAULT_IO_THREADS = Runtime.getRuntime().availableProcessors() * 2;
    30
    31      // Workaround for JDK NIO bug.
    32      //
    33      // See:
    34      // - http://bugs.sun.com/view_bug.do?bug_id=6427854
    35      // - https://github.com/netty/netty/issues/203
    36      static {
    37          String key = "sun.nio.ch.bugLevel";
    38          try {
    39              String buglevel = System.getProperty(key);
    40              if (buglevel == null) {
    41                  System.setProperty(key, "");
    42              }
    43          } catch (SecurityException e) {
    44              if (logger.isDebugEnabled()) {
    45                  logger.debug("Unable to get/set System Property '" + key + "'", e);
    46              }
    47          }
    48      }
    49
    50      static void select(Selector selector) throws IOException {
    51          try {
    52              selector.select(10);
    53          } catch (CancelledKeyException e) {
    54              if (logger.isDebugEnabled()) {
    55                  logger.debug(
    56                          CancelledKeyException.class.getSimpleName() +
    57                          " raised by a Selector - JDK bug?", e);
    58              }
    59              // Harmless exception - log anyway
    60          }
    61      }
    62
    63      private SelectorUtil() {
    64          // Unused
    65      }
    66  }