closeChannel(CloseReason.ALARM_EXCEPTION);
teardown(TeardownReason.ALARM_EXCEPTION);
    public void setAlarm(long millis) {        Runnable alarm = new Runnable() {            public void run() {                try {                    addToNDC();                    if (mDebug) mLog.debug("firing alarm");                    synchronized (mLock) {                        try {                            mConnectionHandler.handleAlarm();                        } catch (Throwable t) {                            closeChannel(CloseReason.ALARM_EXCEPTION);                        }                    }                } finally {                    clearFromNDC();                }            }        };        synchronized (mAlarmLock) {            if (mAlarmHandle != null) {                cancelAlarm();            }            if (mDebug) mLog.debug("creating alarm to fire in " + millis + "ms");            mAlarmHandle = mAlarmExecutor.schedule(alarm, millis, TimeUnit.MILLISECONDS);        }    }