Program: 110675
Project: 110675
Buggy source:
/** 
 * Execute a   {@link Callable}, retrying execution in case of failure and returning the result in case of success. <p>  {@link InterruptedException} is not retried.
 * @param call  the {@link Callable} to execute.
 * @throws RetryException2 if the {@code call} didn't succeed within the framework specified by{@code backoffSupplier} and {@code shouldRetry}.
 * @throws CircuitBreakerException  in case a call was rejected because the circuit breakertripped.
 * @throws InterruptedException if the {@code call} throws an {@link InterruptedException} or thecurrent thread's interrupted flag is set.
 */
public <T>T execute(Callable<T> call) throws RetryException2, InterruptedException {
  final Backoff backoff=newBackoff();
  while (true) {
    final State circuitState;
    circuitState=circuitBreaker.state();
    if (State.REJECT_CALLS.equals(circuitState)) {
      throw new CircuitBreakerException();
    }
    try {
      if (Thread.interrupted()) {
        throw new InterruptedException();
      }
      T r=call.call();
      circuitBreaker.recordSuccess();
      return r;
    }
 catch (    InterruptedException e) {
      circuitBreaker.recordFailure();
      throw e;
    }
catch (    Exception e) {
      circuitBreaker.recordFailure();
      if (e instanceof RetryException2) {
        e=(Exception)e.getCause();
      }
      if (State.TRIAL_CALL.equals(circuitState)) {
        throw new CircuitBreakerException("String_Node_Str",0,e);
      }
      if (!shouldRetry.test(e)) {
        throw new RetryException2("String_Node_Str",backoff.getRetryAttempts(),e);
      }
      final long delayMillis=backoff.nextDelayMillis();
      if (delayMillis < 0) {
        throw new RetryException2("String_Node_Str" + backoff.getRetryAttempts(),backoff.getRetryAttempts(),e);
      }
      sleeper.sleep(delayMillis);
    }
  }
}

Fixed version (ground truth):
/** 
 * Execute a   {@link Callable}, retrying execution in case of failure and returning the result in case of success. <p>  {@link InterruptedException} is not retried.
 * @param call  the {@link Callable} to execute.
 * @throws RetryException2 if the {@code call} didn't succeed within the framework specified by{@code backoffSupplier} and {@code shouldRetry}.
 * @throws CircuitBreakerException  in case a call was rejected because the circuit breakertripped.
 * @throws InterruptedException if the {@code call} throws an {@link InterruptedException} or thecurrent thread's interrupted flag is set.
 */
public <T>T execute(Callable<T> call) throws RetryException2, InterruptedException {
  final Backoff backoff=newBackoff();
  while (true) {
    final State circuitState;
    circuitState=circuitBreaker.state();
    if (State.REJECT_CALLS.equals(circuitState)) {
      throw new CircuitBreakerException();
    }
    try {
      if (Thread.interrupted()) {
        throw new InterruptedException();
      }
      T r=call.call();
      circuitBreaker.recordSuccess();
      return r;
    }
 catch (    InterruptedException e) {
      circuitBreaker.recordFailure();
      throw e;
    }
catch (    Exception e) {
      circuitBreaker.recordFailure();
      if (e instanceof RetryException2) {
        e=(Exception)e.getCause();
      }
      if (State.TRIAL_CALL.equals(circuitState)) {
        throw new CircuitBreakerException("String_Node_Str",0,e);
      }
      int attempts=backoff.getRetryAttempts();
      if (!shouldRetry.test(e)) {
        throw new RetryException2("String_Node_Str",attempts,e);
      }
      final long delayMillis=backoff.nextDelayMillis();
      if (delayMillis < 0) {
        throw new RetryException2("String_Node_Str" + attempts,attempts,e);
      }
      sleeper.sleep(delayMillis);
    }
  }
}