protected void handleOrDeferViewEvent(NetView viewArg){
  if (this.isJoining) {
synchronized (startupLock) {
      startupMessages.add(new StartupEvent(viewArg));
      return;
    }
  }
  latestViewWriteLock.lock();
  try {
synchronized (startupLock) {
      if (!processingEvents) {
        startupMessages.add(new StartupEvent(viewArg));
        return;
      }
    }
    long newId=viewArg.getViewId();
    LocalViewMessage v=new LocalViewMessage(address,newId,viewArg,GMSMembershipManager.this);
    listener.messageReceived(v);
  }
  finally {
    latestViewWriteLock.unlock();
  }
}

protected void handleOrDeferViewEvent ( NetView viewArg ) { if ( this . isJoining ) { synchronized ( startupLock ) { startupMessages . add ( new StartupEvent ( viewArg ) ) ; return ; } } latestViewWriteLock . lock ( ) ; try { synchronized ( startupLock ) { if ( ! processingEvents ) { startupMessages . add ( new StartupEvent ( viewArg ) ) ; return ; } } long newId = viewArg . getViewId ( ) ; LocalViewMessage v = new LocalViewMessage ( address , newId , viewArg , GMSMembershipManager . this ) ; listener . messageReceived ( v ) ; } finally { latestViewWriteLock . unlock ( ) ; } }
process a new view object , or place on the startup queue
