The lock sh->txpp.mutex isn't correctly released if the function return in the 
patched branch, which may lead to deadlock if this lock is acuired again. The 
patch is to fix this problem.

Cc: cy...@connect.ust.hk
Bugzilla ID: 774

Signed-off-by: Chengfeng Ye <cy...@connect.ust.hk>
---
 drivers/net/mlx5/mlx5_txpp.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/net/mlx5/mlx5_txpp.c b/drivers/net/mlx5/mlx5_txpp.c
index 4f6da9f2d1..0ece788a84 100644
--- a/drivers/net/mlx5/mlx5_txpp.c
+++ b/drivers/net/mlx5/mlx5_txpp.c
@@ -961,8 +961,12 @@ mlx5_txpp_stop(struct rte_eth_dev *dev)
        MLX5_ASSERT(!ret);
        RTE_SET_USED(ret);
        MLX5_ASSERT(sh->txpp.refcnt);
-       if (!sh->txpp.refcnt || --sh->txpp.refcnt)
+       if (!sh->txpp.refcnt || --sh->txpp.refcnt) {
+               ret = pthread_mutex_unlock(&sh->txpp.mutex);
+               MLX5_ASSERT(!ret);
+               RTE_SET_USED(ret);
                return;
+       }
        /* No references any more, do actual destroy. */
        mlx5_txpp_destroy(sh);
        ret = pthread_mutex_unlock(&sh->txpp.mutex);
-- 
2.17.1

Reply via email to