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 <dariuszx.stojaczyk@intel.com>
This commit is contained in:
Dariusz Stojaczyk 2017-05-12 17:52:35 +02:00 committed by Jim Harris
parent f4cd3c08dd
commit 6973898164

View File

@ -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);
}
}