else { if(log.isTraceEnabled()) log.trace("didn't find multiple coordinators in " + initial_mbrs + ", skipping merge"); }
        public void run() {            long interval;            Vector coords=null;            Vector initial_mbrs;            if(log.isDebugEnabled()) log.debug("merge task started");            while(thread != null) {                interval=computeInterval();                Util.sleep(interval);                if(thread == null) break;                initial_mbrs=findInitialMembers();                if(thread == null) break;                if(log.isDebugEnabled()) log.debug("initial_mbrs=" + initial_mbrs);                coords=findMultipleCoordinators(initial_mbrs);                if(coords != null && coords.size() > 1) {                    if(log.isDebugEnabled())                        log.debug("found multiple coordinators: " + coords + "; sending up MERGE event");                    final Event evt=new Event(Event.MERGE, coords);                    if(use_separate_thread) {                        Thread merge_notifier=new Thread() {                            public void run() {                                passUp(evt);                            }                        };                        merge_notifier.setDaemon(true);                        merge_notifier.setName("merge notifier thread");                    }                    else {                        passUp(evt);                    }                }            }            if(log.isTraceEnabled())                log.trace("MERGE2.FindSubgroups thread terminated");        }