Exemplo n.º 1
0
  @Override
  void getBlock(URI uri, long tick) {
    Buff duplicate = null;

    synchronized (this) {
      if (Debug.THREADS) ThreadAssert.resume(this, false);

      int index = Tick.indexOf(_ticks, tick);

      if (index >= 0) {
        Buff buff = _buffs[index];

        if (buff != null) {
          duplicate = buff.duplicate();

          if (Debug.THREADS) ThreadAssert.exchangeGive(duplicate, duplicate);
        }
      }

      if (Debug.THREADS) ThreadAssert.suspend(this);
    }

    if (duplicate != null) {
      Buff[] duplicates = new Buff[] {duplicate};

      if (Debug.THREADS) {
        ThreadAssert.exchangeTake(duplicate);
        ThreadAssert.exchangeGive(duplicates, duplicate);
      }

      uri.onBlock(this, tick, duplicates, null, true, null, false, null);

      if (Debug.THREADS) ThreadAssert.exchangeTake(duplicates);

      duplicate.recycle();
    }
  }