synchronized (this) { if (mClosed) { ZimbraLog.ozserver.warn("duplicate close cid=" + mId); return; } mClosed = true; }
    public void closeNow() {        Runnable closeTask = new Runnable() {            public void run() {            	ZimbraLog.ozserver.info("closing cid=" + mId);                OzBufferManager.returnBuffer(mReadBuffer);                try {                    mChannel.close();                } catch (IOException ioe) {                    ZimbraLog.ozserver.warn("error closing cid=" + mId, ioe);                }                mSelectionKey.cancel();            }        };        synchronized (this) {        	if (mClosed) {        		ZimbraLog.ozserver.warn("duplicate close cid=" + mId);        		return;        	}        	mClosed = true;        }        mServer.runTaskInIoThread(closeTask);    }