Program: 7441
Project: 7441
Buggy source:
/** 
 * Invokes to perform dequeue and optionally invoke the user process input / tick method if dequeue gave a non empty result.
 * @param entry Contains information about the process method and queue.
 * @param processQueue The queue for queuing up all process input methods in a flowlet instance.
 * @param < T > Type of input of the process method accepted.
 * @return {@code true} if the entry is handled completely (regardless of process result), {@code false} otherwise.
 */
private <T>boolean handleProcessEntry(FlowletProcessEntry<T> entry,BlockingQueue<FlowletProcessEntry<?>> processQueue){
  if (!entry.shouldProcess()) {
    return false;
  }
  ProcessMethod<T> processMethod=entry.getProcessSpec().getProcessMethod();
  if (processMethod.needsInput()) {
    flowletContext.getProgramMetrics().increment("String_Node_Str",1);
  }
  TransactionContext txContext=dataFabricFacade.createTransactionManager();
  try {
    txContext.start();
    try {
      InputDatum<T> input=entry.getProcessSpec().getQueueReader().dequeue(0,TimeUnit.MILLISECONDS);
      if (!input.needProcess()) {
        entry.backOff();
        txContext.finish();
        return false;
      }
      entry.resetBackOff();
      if (!entry.isRetry()) {
        inflight.getAndIncrement();
      }
      try {
        ProcessMethod.ProcessResult<?> result=processMethod.invoke(input);
        postProcess(processMethodCallback(processQueue,entry,input),txContext,input,result);
        return true;
      }
 catch (      Throwable t) {
        if (!entry.isRetry()) {
          inflight.decrementAndGet();
        }
      }
    }
 catch (    Throwable t) {
      LOG.error("String_Node_Str",flowletContext,t);
      try {
        txContext.abort();
      }
 catch (      Throwable e) {
        LOG.error("String_Node_Str",flowletContext,e);
      }
    }
  }
 catch (  Throwable t) {
    LOG.error("String_Node_Str",t);
  }
  return false;
}

Fixed version (ground truth):
/** 
 * Invokes to perform dequeue and optionally invoke the user process input / tick method if dequeue gave a non empty result.
 * @param entry Contains information about the process method and queue.
 * @param processQueue The queue for queuing up all process input methods in a flowlet instance.
 * @param < T > Type of input of the process method accepted.
 * @return {@code true} if the entry is handled completely (regardless of process result), {@code false} otherwise.
 */
private <T>boolean handleProcessEntry(FlowletProcessEntry<T> entry,PriorityQueue<FlowletProcessEntry<?>> processQueue){
  if (!entry.shouldProcess()) {
    return false;
  }
  ProcessMethod<T> processMethod=entry.getProcessSpec().getProcessMethod();
  if (processMethod.needsInput()) {
    flowletContext.getProgramMetrics().increment("String_Node_Str",1);
  }
  TransactionContext txContext=dataFabricFacade.createTransactionManager();
  try {
    txContext.start();
    try {
      InputDatum<T> input=entry.getProcessSpec().getQueueReader().dequeue(0,TimeUnit.MILLISECONDS);
      if (!input.needProcess()) {
        entry.backOff();
        txContext.finish();
        return false;
      }
      entry.resetBackOff();
      ProcessMethod.ProcessResult<?> result=processMethod.invoke(input);
      postProcess(processMethodCallback(processQueue,entry,input),txContext,input,result);
      return true;
    }
 catch (    Throwable t) {
      LOG.error("String_Node_Str",flowletContext,t);
      try {
        txContext.abort();
      }
 catch (      Throwable e) {
        LOG.error("String_Node_Str",flowletContext,e);
      }
    }
  }
 catch (  Throwable t) {
    LOG.error("String_Node_Str",t);
  }
  return false;
}