Program: 133403
Project: 133403
Buggy source:
@Override protected IStatus run(IProgressMonitor monitor){
  final int ticks=100;
  int worked=0;
  monitor.beginTask("String_Node_Str",ticks);
  status=FormStatus.Processing;
  Action.clearConsole();
  for (  Action action : actions) {
    currentlyRunningAction=action;
    monitor.subTask("String_Node_Str" + currentlyRunningAction.getActionName() + "String_Node_Str");
    FormStatus tempStatus=currentlyRunningAction.execute(actionDataMap);
    if (tempStatus.equals(FormStatus.InfoError)) {
      return error("String_Node_Str" + action.getActionName() + "String_Node_Str",null);
    }
    if (tempStatus.equals(FormStatus.NeedsInfo)) {
      status=tempStatus;
      while (status.equals(FormStatus.Processing) || status.equals(FormStatus.NeedsInfo)) {
        try {
          Thread.sleep(100);
        }
 catch (        InterruptedException e1) {
          return error("String_Node_Str" + action.getActionName() + "String_Node_Str",e1);
        }
      }
      status=FormStatus.Processing;
    }
    if (monitor.isCanceled()) {
      currentlyRunningAction.cancel();
      status=FormStatus.Processed;
      return Status.CANCEL_STATUS;
    }
    while (tempStatus.equals(FormStatus.Processing)) {
      try {
        Thread.sleep(100);
      }
 catch (      InterruptedException e1) {
        return error("String_Node_Str" + action.getActionName() + "String_Node_Str",e1);
      }
      tempStatus=currentlyRunningAction.getStatus();
    }
    worked+=ticks / actions.size();
    monitor.worked(worked);
  }
  status=FormStatus.Processed;
  monitor.worked(ticks);
  monitor.done();
  return Status.OK_STATUS;
}

Fixed version (ground truth):
@Override protected IStatus run(IProgressMonitor monitor){
  final int ticks=100;
  int worked=0;
  monitor.beginTask("String_Node_Str",ticks);
  status=FormStatus.Processing;
  Action.clearConsole();
  for (  Action action : actions) {
    currentlyRunningAction=action;
    monitor.subTask("String_Node_Str" + currentlyRunningAction.getActionName() + "String_Node_Str");
    FormStatus tempStatus=currentlyRunningAction.execute(actionDataMap);
    if (tempStatus.equals(FormStatus.InfoError)) {
      return error("String_Node_Str" + action.getActionName() + "String_Node_Str",null);
    }
    if (tempStatus.equals(FormStatus.NeedsInfo)) {
      status=FormStatus.NeedsInfo;
      while (tempStatus.equals(FormStatus.NeedsInfo)) {
        try {
          Thread.sleep(100);
        }
 catch (        InterruptedException e1) {
          return error("String_Node_Str" + action.getActionName() + "String_Node_Str",e1);
        }
        tempStatus=currentlyRunningAction.getStatus();
      }
      status=FormStatus.Processing;
    }
    if (monitor.isCanceled()) {
      currentlyRunningAction.cancel();
      status=FormStatus.Processed;
      return Status.CANCEL_STATUS;
    }
    while (tempStatus.equals(FormStatus.Processing)) {
      try {
        Thread.sleep(100);
      }
 catch (      InterruptedException e1) {
        return error("String_Node_Str" + action.getActionName() + "String_Node_Str",e1);
      }
      tempStatus=currentlyRunningAction.getStatus();
    }
    worked+=ticks / actions.size();
    monitor.worked(worked);
  }
  status=FormStatus.Processed;
  monitor.worked(ticks);
  monitor.done();
  return Status.OK_STATUS;
}