diff --git a/src/urpc/umq/umq_ub/umq_ub_impl.c b/src/urpc/umq/umq_ub/umq_ub_impl.c index bf2749342d137e50bc3fde5f1a8549ed194cab64..a21ab1919e4612e2764ab80c846577ddf8103636 100644 --- a/src/urpc/umq/umq_ub/umq_ub_impl.c +++ b/src/urpc/umq/umq_ub/umq_ub_impl.c @@ -2821,12 +2821,15 @@ static int umq_ub_post_tx(uint64_t umqh, umq_buf_t *qbuf, umq_buf_t **bad_qbuf) goto RECOVER_WINDOW; } - umq_dec_ref(queue->dev_ctx->io_lock_free, &queue->ref_cnt, 1); if (max_tx < wr_index) { *bad_qbuf = (umq_buf_t *)(uintptr_t)urma_wr[max_tx].user_ctx; + umq_ub_recover_tx_imm(queue, urma_wr, wr_index, *bad_qbuf); + umq_dec_ref(queue->dev_ctx->io_lock_free, &queue->ref_cnt, 1); return -UMQ_ERR_EAGAIN; } + umq_dec_ref(queue->dev_ctx->io_lock_free, &queue->ref_cnt, 1); + return UMQ_SUCCESS; RECOVER_WINDOW: