Program: 29009
Project: 29009
Buggy source:
/** 
 */
protected boolean callEJBTimeout(RuntimeTimerState timerState,EJBTimerService timerService) throws Exception {
  boolean redeliver=false;
  if (containerState != CONTAINER_STARTED) {
    throw new EJBException("String_Node_Str" + containerStateToString(containerState));
  }
  EjbInvocation inv=invFactory.create();
  inv.isTimerCallback=true;
  inv.transactionAttribute=Container.TX_NOT_INITIALIZED;
  inv.securityPermissions=com.sun.ejb.Container.SEC_UNCHECKED;
  inv.method=getTimeoutMethod(timerState);
  inv.beanMethod=inv.method;
  ClassLoader originalClassLoader=null;
  try {
    prepareEjbTimeoutParams(inv,timerState,timerService);
    doTimerInvocationInit(inv,timerState.getTimedObjectPrimaryKey());
    originalClassLoader=Utility.setContextClassLoader(loader);
    preInvoke(inv);
    intercept(inv);
    if (!isBeanManagedTran && (transactionManager.getStatus() == Status.STATUS_MARKED_ROLLBACK)) {
      redeliver=true;
      _logger.log(Level.FINE,"String_Node_Str");
    }
  }
 catch (  InvocationTargetException ite) {
    redeliver=true;
    inv.exception=ite.getCause();
    _logger.log(Level.FINE,"String_Node_Str",inv.exception);
  }
catch (  Throwable c) {
    redeliver=true;
    _logger.log(Level.FINE,"String_Node_Str",c);
    inv.exception=c;
  }
 finally {
    if (!redeliver) {
      boolean success=postEjbTimeout(timerState,timerService);
      redeliver=!success;
    }
    postInvoke(inv);
    if ((redeliver == false) && (inv.exception != null)) {
      redeliver=true;
    }
    if (originalClassLoader != null) {
      Utility.setContextClassLoader(originalClassLoader);
    }
  }
  return redeliver;
}

Fixed version (ground truth):
/** 
 */
protected boolean callEJBTimeout(RuntimeTimerState timerState,EJBTimerService timerService) throws Exception {
  boolean redeliver=false;
  if (containerState != CONTAINER_STARTED) {
    throw new EJBException("String_Node_Str" + containerStateToString(containerState));
  }
  EjbInvocation inv=invFactory.create();
  inv.isTimerCallback=true;
  inv.transactionAttribute=Container.TX_NOT_INITIALIZED;
  inv.method=getTimeoutMethod(timerState);
  inv.beanMethod=inv.method;
  ClassLoader originalClassLoader=null;
  try {
    prepareEjbTimeoutParams(inv,timerState,timerService);
    doTimerInvocationInit(inv,timerState.getTimedObjectPrimaryKey());
    originalClassLoader=Utility.setContextClassLoader(loader);
    preInvoke(inv);
    intercept(inv);
    if (!isBeanManagedTran && (transactionManager.getStatus() == Status.STATUS_MARKED_ROLLBACK)) {
      redeliver=true;
      _logger.log(Level.FINE,"String_Node_Str");
    }
  }
 catch (  InvocationTargetException ite) {
    redeliver=true;
    inv.exception=ite.getCause();
    _logger.log(Level.FINE,"String_Node_Str",inv.exception);
  }
catch (  Throwable c) {
    redeliver=true;
    _logger.log(Level.FINE,"String_Node_Str",c);
    inv.exception=c;
  }
 finally {
    if (!redeliver) {
      boolean success=postEjbTimeout(timerState,timerService);
      redeliver=!success;
    }
    postInvoke(inv);
    if ((redeliver == false) && (inv.exception != null)) {
      redeliver=true;
    }
    if (originalClassLoader != null) {
      Utility.setContextClassLoader(originalClassLoader);
    }
  }
  return redeliver;
}