Program: 81454
Project: 81454
Buggy source:
@Override protected void executing() throws Exception {
  P_waiting=Lists.newArrayList();
  P_ready=Sets.newHashSet();
  P_executing=Maps.newHashMap();
  P_skipped=Lists.newArrayList();
  P_invoked=Lists.newArrayList();
  ExecutionMode executionMode=ExecutionMode.NATURAL_ORDER;
  getHeap().initializeVariablesWithLiterals(analyzer.getInZoomedProcess(getOpd()));
  pc=new OPPInZoomedProcessIntanceProgramCounter(getOpd());
  pc.setPC(pc.getNextPC());
  calculateNextProcesses();
  executeReadyProcesses();
  while (!P_executing.isEmpty()) {
    if (Thread.currentThread().isInterrupted()) {
      logInfo("String_Node_Str");
      return;
    }
    try {
      heapObserver.clear();
      Future<OPPProcessExecutionResult> executionResult=completionService.take();
      OPPProcessInstance executedInstance=executionResult.get().getInstance();
      OPPProcess executedProcess=P_executing.get(executedInstance);
      P_executing.remove(executedInstance);
      argumentHandler.extractResultsToVariables(executedProcess,executedInstance);
      Set<OPPProcess> invoked=findInvokedAndNotSkippedProcesses();
      if (invoked.size() > 0) {
        executionMode=ExecutionMode.EVENT;
      }
switch (executionMode) {
case NATURAL_ORDER:
        calculateNextProcesses();
      executeReadyProcesses();
    break;
case EVENT:
  if (invoked.size() > 0) {
    P_ready.addAll(invoked);
    executeReadyProcesses();
  }
 else {
    if (P_executing.size() == 0) {
      executionMode=ExecutionMode.NATURAL_ORDER;
      pc.setPC(executedProcess.getY() + executedProcess.getHeight());
      calculateNextProcesses();
      executeReadyProcesses();
    }
  }
break;
}
}
 catch (InterruptedException e) {
logInfo("String_Node_Str");
return;
}
}
if (P_waiting.size() > 0) logInfo("String_Node_Str",getName(),P_waiting.size());
}

Fixed version (ground truth):
@Override protected void executing() throws Exception {
  P_waiting=Lists.newArrayList();
  P_ready=Sets.newHashSet();
  P_executing=Maps.newHashMap();
  P_skipped=Lists.newArrayList();
  P_invoked=Lists.newArrayList();
  ExecutionMode executionMode=ExecutionMode.NATURAL_ORDER;
  getHeap().initializeVariablesWithLiterals(analyzer.getInZoomedProcess(getOpd()));
  pc=new OPPInZoomedProcessIntanceProgramCounter(getOpd());
  pc.setPC(pc.getNextPC());
  calculateNextProcesses();
  executeReadyProcesses();
  while (!P_executing.isEmpty()) {
    if (Thread.currentThread().isInterrupted()) {
      logInfo("String_Node_Str");
      return;
    }
    try {
      heapObserver.clear();
      Future<OPPProcessExecutionResult> executionResult=completionService.take();
      OPPProcessInstance executedInstance=executionResult.get().getInstance();
      OPPProcess executedProcess=P_executing.get(executedInstance);
      P_executing.remove(executedInstance);
      argumentHandler.extractResultsToVariables(executedProcess,executedInstance);
      Set<OPPProcess> invoked=findInvokedAndNotSkippedProcesses();
      if (invoked.size() > 0) {
        executionMode=ExecutionMode.EVENT;
      }
switch (executionMode) {
case NATURAL_ORDER:
        calculateNextProcesses();
      executeReadyProcesses();
    break;
case EVENT:
  if (invoked.size() > 0) {
    P_ready.addAll(invoked);
    executeReadyProcesses();
  }
 else {
    if (P_executing.size() == 0) {
      executionMode=ExecutionMode.NATURAL_ORDER;
      pc.setPC(executedProcess.getY() + executedProcess.getHeight());
      pc.setPC(pc.getNextPC());
      calculateNextProcesses();
      executeReadyProcesses();
    }
  }
break;
}
}
 catch (InterruptedException e) {
logInfo("String_Node_Str");
return;
}
}
if (P_waiting.size() > 0) logInfo("String_Node_Str",getName(),P_waiting.size());
}