@Override
  public Object down(Event evt) {
    switch (evt.getType()) {
      case Event.MSG:
        Message msg = (Message) evt.getArg();
        processForMulticast(msg, OUTGOING);
        processForUnicast(msg, OUTGOING);
        filter(msg, OUTGOING);
        break;
    }
    do {
      try {
        return down_prot.down(evt);
      } catch (RejectedExecutionException e) {
        logger
            .debug("retrying JGroups message transmission due to rejected execution (GEODE-1178)");
        try {
          Thread.sleep(10);
        } catch (InterruptedException ie) {
          // down() does not throw InterruptedException so we can only set the interrupt flag and
          // return
          Thread.currentThread().interrupt();
          return null;
        }
      }
    } while (services != null && !services.getManager().shutdownInProgress()
        && !services.getCancelCriterion().isCancelInProgress());
    return null;
  }
sets the services object of the GMS that is using this recorder

@param services the Services collective of the GMS
geode-membership/src/main/java/org/apache/geode/distributed/internal/membership/gms/messenger/StatRecorder.java