private void invoke()

in src/main/java/com/spotify/futures/ConcurrencyLimiter.java [178:212]


  private void invoke(
      final SettableFuture<T> response, Callable<? extends ListenableFuture<T>> callable) {
    final ListenableFuture<T> future;
    try {
      future = callable.call();
      if (future == null) {
        limit.release();
        response.setException(new NullPointerException());
        return;
      }
    } catch (Throwable e) {
      limit.release();
      response.setException(e);
      return;
    }

    Futures.addCallback(
        future,
        new FutureCallback<T>() {
          @Override
          public void onSuccess(T result) {
            limit.release();
            response.set(result);
            pump();
          }

          @Override
          public void onFailure(Throwable t) {
            limit.release();
            response.setException(t);
            pump();
          }
        },
        executor);
  }