Program: 35280
Project: 35280
Buggy source:
@Override public void userEventTriggered(ChannelHandlerContext ctx,Object evt) throws Exception {
  if (evt instanceof DataFrameSentEvent) {
    DataFrameSentEvent dfse=(DataFrameSentEvent)evt;
    logger.trace("String_Node_Str",dfse.getDataFrame());
    if (!hasCurrentTransaction()) {
      NettyZWaveChannelContext zctx=new NettyZWaveChannelContext();
      currentDataFrameTransaction=dfse.getDataFrame().createWrapperTransaction(zctx,dfse.isListeningNode());
      if (currentDataFrameTransaction != null) {
        logger.trace("String_Node_Str",dfse.getDataFrame(),currentDataFrameTransaction.getId());
        startTimeoutCallback();
        zctx.process(ctx);
      }
    }
 else     if (currentDataFrameTransaction != null && currentDataFrameTransaction.getStartFrame() == dfse.getDataFrame()) {
      logger.trace("String_Node_Str");
      startTimeoutCallback();
    }
 else {
      logger.trace("String_Node_Str",dfse.getDataFrame());
    }
  }
 else   if (evt instanceof TransactionTimeoutEvent) {
    TransactionTimeoutEvent tte=(TransactionTimeoutEvent)evt;
    if (tte.getId().equals(currentDataFrameTransaction.getId())) {
      logger.trace("String_Node_Str");
      timeoutFuture=null;
      NettyZWaveChannelContext zctx=new NettyZWaveChannelContext();
      currentDataFrameTransaction.timeout(zctx);
      zctx.process(ctx);
    }
 else {
      logger.error("String_Node_Str",tte.getId());
    }
  }
 else {
    ctx.fireUserEventTriggered(evt);
  }
}

Fixed version (ground truth):
@Override public void userEventTriggered(ChannelHandlerContext ctx,Object evt) throws Exception {
  if (evt instanceof DataFrameSentEvent) {
    DataFrameSentEvent dfse=(DataFrameSentEvent)evt;
    logger.trace("String_Node_Str",dfse.getDataFrame());
    if (!hasCurrentTransaction()) {
      NettyZWaveChannelContext zctx=new NettyZWaveChannelContext();
      currentDataFrameTransaction=dfse.getDataFrame().createWrapperTransaction(zctx,dfse.isListeningNode());
      if (currentDataFrameTransaction != null) {
        logger.trace("String_Node_Str",dfse.getDataFrame(),currentDataFrameTransaction.getId());
        startTimeoutCallback();
        zctx.process(ctx);
      }
    }
 else     if (currentDataFrameTransaction != null && currentDataFrameTransaction.getStartFrame() == dfse.getDataFrame()) {
      logger.trace("String_Node_Str");
      startTimeoutCallback();
    }
 else {
      logger.trace("String_Node_Str",dfse.getDataFrame());
    }
  }
 else   if (evt instanceof TransactionTimeoutEvent) {
    TransactionTimeoutEvent tte=(TransactionTimeoutEvent)evt;
    if (tte.getId().equals(currentDataFrameTransaction.getId())) {
      logger.trace("String_Node_Str");
      timeoutFuture=null;
      NettyZWaveChannelContext zctx=new NettyZWaveChannelContext();
      currentDataFrameTransaction.timeout(zctx);
      zctx.process(ctx);
    }
 else {
      logger.error("String_Node_Str",tte.getId());
    }
  }
 else   if (evt instanceof TransactionFailedEvent) {
    TransactionFailedEvent tfe=(TransactionFailedEvent)evt;
    if (tfe.getId().equals(currentDataFrameTransaction.getId())) {
      logger.trace("String_Node_Str",tfe.getId());
      currentDataFrameTransaction=null;
    }
 else {
      logger.error("String_Node_Str",tfe.getId());
    }
  }
 else {
    ctx.fireUserEventTriggered(evt);
  }
}