log.debug("Unblocked special " + localAddress);
log.debug("Unblocked after first view " + localAddress); return;
   public void up(Event evt)   {      Message msg = null;      switch (evt.getType())      {         case Event.MSG :            msg = (Message) evt.getArg();            FlushHeader fh = (FlushHeader) msg.removeHeader(getName());            if (fh != null)            {               if (fh.type == FlushHeader.START_FLUSH)               {                  boolean successfulBlock = sendBlockUpToChannel(block_timeout);                  if (successfulBlock && log.isDebugEnabled())                  {                     log.debug("Blocking of channel " + localAddress + " completed successfully");                  }                                    onStartFlush(msg.getSrc(), fh);               }                          else if (isCurrentFlushMessage(fh))               {                                                 				  if (fh.type == FlushHeader.STOP_FLUSH && !sentBlockEventUp)			      {                                       sentBlockEventUp = true;			         onStopFlush();			         passUp(new Event(Event.UNBLOCK));                       			         if (log.isDebugEnabled())			             log.debug("Unblocked " + localAddress + " fh " + fh + " cv " + currentViewId());			      }                  if (fh.type == FlushHeader.FLUSH_OK)                  {                     onFlushOk(msg.getSrc(), fh.viewID);                  }                  else if (fh.type == FlushHeader.FLUSH_COMPLETED)                  {                     onFlushCompleted(msg.getSrc());                  }               }               else               {                  if (log.isDebugEnabled())                     log.debug(localAddress + " received outdated FLUSH message " + fh + ",ignoring it.");               }               return; //do not pass FLUSH msg up            }            break;         case Event.VIEW_CHANGE :            onViewChange((View) evt.getArg());            passUp(evt);            boolean firstView = receivedFirstView && !receivedMoreThanOneView;            if (firstView)            {               //fake STOP_FLUSH so new member is guaranteed                //to receive sequence of events (View,UnblockEvent)                sentBlockEventUp = true;               onStopFlush();               passUp(new Event(Event.UNBLOCK));                              if (log.isDebugEnabled())                  log.debug("Unblocked special " + localAddress);            }            return;         case Event.SET_LOCAL_ADDRESS :            localAddress = (Address) evt.getArg();            break;         case Event.SUSPECT :            onSuspect((Address) evt.getArg());            break;         case Event.SUSPEND :            onSuspend((View) evt.getArg());            return;         case Event.RESUME :            onResume();            return;      }      passUp(evt);   }