Exemple #1
0
  protected Object handleDownMessage(final Event evt, final Message msg, Address dest, int length) {
    if (dest != null) // 2nd line of defense, not really needed
    return down_prot.down(evt);

    long block_time = max_block_times != null ? getMaxBlockTime(length) : max_block_time;
    while (running) {
      boolean rc = credits.decrement(length, block_time);
      if (rc || max_block_times != null || !running) break;

      if (needToSendCreditRequest()) {
        List<Tuple<Address, Long>> targets = credits.getMembersWithCreditsLessThan(min_credits);
        for (Tuple<Address, Long> tuple : targets)
          sendCreditRequest(tuple.getVal1(), Math.min(max_credits, max_credits - tuple.getVal2()));
      }
    }

    // send message - either after regular processing, or after blocking (when enough credits are
    // available again)
    return down_prot.down(evt);
  }