long start = ZimbraPerf.STOPWATCH_IMAP.start();
    protected boolean processCommand() throws IOException {        ImapRequest req = null;        boolean keepGoing = CONTINUE_PROCESSING;        ZimbraLog.clearContext();        if (ZimbraPerf.isPerfEnabled())            ThreadLocalData.reset();        long start = ZimbraPerf.STOPWATCH_IMAP.start();        try {            // FIXME: throw an exception instead?            if (mInputStream == null)                return STOP_PROCESSING;            if (mSession != null)                ZimbraLog.addAccountNameToContext(mSession.getUsername());            ZimbraLog.addIpToContext(mRemoteAddress);            req = mIncompleteRequest;            if (req == null)                req = new ImapRequest(mInputStream, mSession);            req.continuation();                        // check account status before executing command            if (mMailbox != null)                try {                    Account account = mMailbox.getAccount();                    if (account == null || !account.getAccountStatus().equals(Provisioning.ACCOUNT_STATUS_ACTIVE)) {                        ZimbraLog.imap.warn("account missing or not active; dropping connection");                        return STOP_PROCESSING;                    }                } catch (ServiceException e) {                    ZimbraLog.imap.warn("error checking account status; dropping connection", e);                    return STOP_PROCESSING;                }            keepGoing = executeRequest(req, mSession);            setIdle(false);            mIncompleteRequest = null;            if (ZimbraPerf.isPerfEnabled())                ZimbraPerf.writeStats(STATS_FILE, mLastCommand);            ZimbraPerf.STOPWATCH_IMAP.stop(start);        } catch (ImapContinuationException ice) {            mIncompleteRequest = req.rewind();            if (ice.sendContinuation)                sendContinuation();        } catch (ImapParseException ipe) {            mIncompleteRequest = null;            if (ipe.mTag == null)                sendUntagged("BAD " + ipe.getMessage(), true);            else if (ipe.mCode != null)                sendNO(ipe.mTag, '[' + ipe.mCode + "] " + ipe.getMessage());            else                sendBAD(ipe.mTag, ipe.getMessage());        } catch (ImapTerminatedException ite) {            mIncompleteRequest = null;            keepGoing = STOP_PROCESSING;        } catch (ImapException ie) {            ZimbraLog.imap.error("unexpected (and uncaught) IMAP exception type", ie);            mIncompleteRequest = null;            keepGoing = STOP_PROCESSING;        } finally {            ZimbraLog.clearContext();        }        return keepGoing;    }