From 697389816422e61f9295e60d48be0bd39f0dec14 Mon Sep 17 00:00:00 2001 From: Dariusz Stojaczyk Date: Fri, 12 May 2017 17:52:35 +0200 Subject: [PATCH] vhost: wrap vhost_user_read_cb with vhost_user mutex This fixes spontaneous vhost hangs on SIGINT shutdown. Apperently during vhost_destroy_device(conn->vid) from line #284 another QEMU message might arrive, causing vsocket->conn_mutex deadlock. (line #286) Change-Id: I4f1c31a52facffd1eb1e1192591095f00da55031 Signed-off-by: Dariusz Stojaczyk --- lib/vhost/rte_vhost/socket.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/vhost/rte_vhost/socket.c b/lib/vhost/rte_vhost/socket.c index 4eea67893..4f89329ea 100644 --- a/lib/vhost/rte_vhost/socket.c +++ b/lib/vhost/rte_vhost/socket.c @@ -277,6 +277,8 @@ vhost_user_read_cb(int connfd, void *dat, int *remove) ret = vhost_user_msg_handler(conn->vid, connfd); if (ret < 0) { + pthread_mutex_lock(&vhost_user.mutex); + close(connfd); *remove = 1; vhost_destroy_device(conn->vid); @@ -291,6 +293,8 @@ vhost_user_read_cb(int connfd, void *dat, int *remove) create_unix_socket(vsocket); vhost_user_start_client(vsocket); } + + pthread_mutex_unlock(&vhost_user.mutex); } }