cleanup();
teardown(TeardownReason.ABRUPT);
        public void run() {            synchronized (mLock) {                if (mDebug) {                    ZimbraLog.addToContext("op", mName);                    ZimbraLog.addToContext("opid", new Integer(mTaskCounter.incrementAndGet()).toString());                }                addToNDC();                if (mDebug) mLog.debug("starting " + mName);                try {                    if (mChannelClosed) {                        if (mDebug) mLog.debug("connection already closed, aborting " + mName);                        return;                    }                    mReadRequested = false;                    doTask();                    if (mReadRequested) {                        if (mDebug) mLog.debug("scheduling read register in server thread");                        mServer.schedule(mServerRegisterReadTask);                    }                    if (mWriteManager.isWritePending()) {                        if (mDebug) mLog.debug("scheduling write register in server thread");                        mServer.schedule(mServerRegisterWriteTask);                    }                } catch (Throwable t) {                    mLog.info("exception occurred during " + mName + " task", t);                    cleanup();                } finally {                    if (mDebug) mLog.debug("finished " + mName);                    clearFromNDC();                }            }        }