Program: 8092
Project: 8092
Buggy source:
@Override protected void run(){
  LoggingContextAccessor.setLoggingContext(loggingContext);
  initFlowlet();
  PriorityBlockingQueue<ProcessEntry> processQueue=new PriorityBlockingQueue<ProcessEntry>(processSpecs.size());
  for (  ProcessSpecification spec : processSpecs) {
    processQueue.offer(new ProcessEntry(spec));
  }
  List<ProcessEntry> processList=Lists.newArrayListWithExpectedSize(processSpecs.size() * 2);
  while (isRunning()) {
    CountDownLatch suspendLatch=suspension.get();
    if (suspendLatch != null) {
      try {
        suspendBarrier.await();
        suspendLatch.await();
      }
 catch (      Exception e) {
        continue;
      }
    }
    try {
      processQueue.peek().await();
    }
 catch (    InterruptedException e) {
      LOGGER.info("String_Node_Str",e);
      continue;
    }
    processList.clear();
    processQueue.drainTo(processList);
    for (    ProcessEntry entry : processList) {
      try {
        if (!entry.shouldProcess()) {
          continue;
        }
        InputDatum input=entry.processSpec.getQueueReader().dequeue();
        if (input.isEmpty()) {
          LOGGER.info("String_Node_Str");
          entry.backOff();
          continue;
        }
        entry.nextDeque=0;
        try {
          ProcessMethod processMethod=entry.processSpec.getProcessMethod();
          LOGGER.info("String_Node_Str" + processMethod);
          processMethod.invoke(input).commit(transactionExecutor,processMethodCallback(processQueue,entry,input));
        }
 catch (        Throwable t) {
          LOGGER.error(String.format("String_Node_Str",entry.processSpec),t);
        }
      }
 catch (      OperationException e) {
        LOGGER.error("String_Node_Str",e);
      }
 finally {
        if (!entry.isRetry()) {
          processQueue.offer(entry);
        }
      }
    }
  }
  destroyFlowlet();
}

Fixed version (ground truth):
@Override protected void run(){
  LoggingContextAccessor.setLoggingContext(loggingContext);
  initFlowlet();
  PriorityBlockingQueue<ProcessEntry> processQueue=new PriorityBlockingQueue<ProcessEntry>(processSpecs.size());
  for (  ProcessSpecification spec : processSpecs) {
    processQueue.offer(new ProcessEntry(spec));
  }
  List<ProcessEntry> processList=Lists.newArrayListWithExpectedSize(processSpecs.size() * 2);
  while (isRunning()) {
    CountDownLatch suspendLatch=suspension.get();
    if (suspendLatch != null) {
      try {
        suspendBarrier.await();
        suspendLatch.await();
      }
 catch (      Exception e) {
        continue;
      }
    }
    try {
      processQueue.peek().await();
    }
 catch (    InterruptedException e) {
      LOGGER.info("String_Node_Str",e);
      continue;
    }
    processList.clear();
    processQueue.drainTo(processList);
    for (    ProcessEntry entry : processList) {
      try {
        if (!entry.shouldProcess()) {
          continue;
        }
        InputDatum input=entry.processSpec.getQueueReader().dequeue();
        if (input.isEmpty()) {
          entry.backOff();
          continue;
        }
        entry.nextDeque=0;
        try {
          ProcessMethod processMethod=entry.processSpec.getProcessMethod();
          processMethod.invoke(input).commit(transactionExecutor,processMethodCallback(processQueue,entry,input));
        }
 catch (        Throwable t) {
          LOGGER.error(String.format("String_Node_Str",entry.processSpec),t);
        }
      }
 catch (      OperationException e) {
        LOGGER.error("String_Node_Str",e);
      }
 finally {
        if (!entry.isRetry()) {
          processQueue.offer(entry);
        }
      }
    }
  }
  destroyFlowlet();
}