if(log.isErrorEnabled()) log.error("view_id is null");
log.error("view_id is null");
    public View getNextView(Vector new_mbrs, Vector old_mbrs, Vector suspected_mbrs) {        Vector mbrs;        long vid=0;        View v;        Membership tmp_mbrs=null;        Address tmp_mbr;        synchronized(members) {            if(view_id == null) {                if(log.isErrorEnabled()) log.error("view_id is null");                return null; // this should *never* happen !            }            vid=Math.max(view_id.getId(), ltime) + 1;            ltime=vid;            if(log.isDebugEnabled()) log.debug("VID=" + vid + ", current members=" +                    Util.printMembers(members.getMembers()) +                    ", new_mbrs=" + Util.printMembers(new_mbrs) +                    ", old_mbrs=" + Util.printMembers(old_mbrs) + ", suspected_mbrs=" +                    Util.printMembers(suspected_mbrs));            tmp_mbrs=tmp_members.copy();  // always operate on the temporary membership            tmp_mbrs.remove(suspected_mbrs);            tmp_mbrs.remove(old_mbrs);            tmp_mbrs.add(new_mbrs);            mbrs=tmp_mbrs.getMembers();            v=new View(local_addr, vid, mbrs);            // Update membership (see DESIGN for explanation):            tmp_members.set(mbrs);            // Update joining list (see DESIGN for explanation)            if(new_mbrs != null) {                for(int i=0; i < new_mbrs.size(); i++) {                    tmp_mbr=(Address)new_mbrs.elementAt(i);                    if(!joining.contains(tmp_mbr))                        joining.addElement(tmp_mbr);                }            }            // Update leaving list (see DESIGN for explanations)            if(old_mbrs != null) {                for(Iterator it=old_mbrs.iterator(); it.hasNext();) {                    Address addr=(Address)it.next();                    if(!leaving.contains(addr))                        leaving.add(addr);                }            }            if(suspected_mbrs != null) {                for(Iterator it=suspected_mbrs.iterator(); it.hasNext();) {                    Address addr=(Address)it.next();                    if(!leaving.contains(addr))                        leaving.add(addr);                }            }            if(log.isDebugEnabled()) log.debug("new view is " + v);            return v;        }    }