if(log.isInfoEnabled()) log.info("sending LEAVE request to " + coord);
if(log.isDebugEnabled()) log.debug("sending LEAVE request to " + coord);
    public void leave(Address mbr) {        Address coord;        int max_tries=3;        Object result;        leave_promise.reset();        if(mbr.equals(gms.local_addr))            leaving=true;        while((coord=gms.determineCoordinator()) != null && max_tries-- > 0) {            if(gms.local_addr.equals(coord)) {            // I'm the coordinator                gms.becomeCoordinator();                gms.getImpl().handleLeave(mbr, false);    // regular leave                return;            }            if(log.isInfoEnabled()) log.info("sending LEAVE request to " + coord);            sendLeaveMessage(coord, mbr);            synchronized(leave_promise) {                result=leave_promise.getResult(gms.leave_timeout);                if(result != null)                    break;            }        }        gms.becomeClient();    }