private void openSelector(ThreadNameDeterminer determiner) {
        try {
            selector = SelectorUtil.open();
        } catch (Throwable t) {
            throw new ChannelException("Failed to create a selector.", t);
        }

        // Start the worker thread with the new Selector.
        boolean success = false;
        try {
            DeadLockProofWorker.start(executor, newThreadRenamingRunnable(id, determiner));
            success = true;
        } finally {
            if (!success) {
                // Release the Selector if the execution fails.
                try {
                    selector.close();
                } catch (Throwable t) {
                    logger.warn("Failed to close a selector.", t);
                }
                selector = null;
                // The method will return to the caller at this point.
            }
        }
        assert selector != null && selector.isOpen();
    }
private void openSelector ( ThreadNameDeterminer determiner ) { try { selector = SelectorUtil . open ( ) ; } catch ( Throwable t ) { throw new ChannelException ( "Failed to create a selector." , t ) ; } boolean success = false ; try { DeadLockProofWorker . start ( executor , newThreadRenamingRunnable ( id , determiner ) ) ; success = true ; } finally { if ( ! success ) { try { selector . close ( ) ; } catch ( Throwable t ) { logger . warn ( "Failed to close a selector." , t ) ; } selector = null ; } } assert selector != null && selector . isOpen ( ) ; }
Start the {@link AbstractNioWorker} and return the {@link Selector} that will be used for
the {@link AbstractNioChannel}'s when they get registered