public void register(CanFlowControl control) {
    verifyLegalDownstream(control);

    boolean alreadyExisted = registeredSet.put(control, control) != null;
    if (!alreadyExisted) {
      SiteFlowControl handle = new SiteFlowControl(control);
      control.setUpstreamControl(handle);
      checkFlowControlState();
    }
  }
  public void unregister(CanFlowControl control) {
    verifyLegalDownstream(control);

    if (registeredSet.containsKey(control)) {
      control.setUpstreamControl(FlowControl.NOOP);
      registeredSet.remove(
          control); // dupe effort, but control might have called back into us on
                    // setUpstreamControl.
      blockedSet.remove(control);
      checkFlowControlState();
    }
  }