Vhost: Add thread sync while receiving vhost message 40/3740/1 stable/1609
authorPierre Pfister <ppfister@cisco.com>
Wed, 9 Nov 2016 10:16:57 +0000 (10:16 +0000)
committerPierre Pfister <ppfister@cisco.com>
Wed, 9 Nov 2016 10:16:57 +0000 (10:16 +0000)
It is important to stop the working threads while
some operations are performed on the working threads.

This is a backport of a fix brought in commit e21c52861d.
This should solve Jira ticket VPP526

Change-Id: I6deb27f5de44f0f19401161ee6adecaba86dae1a
Signed-off-by: Pierre Pfister <ppfister@cisco.com>
vnet/vnet/devices/virtio/vhost-user.c

index 25bcbca..f00fd96 100644 (file)
@@ -344,6 +344,9 @@ vhost_user_socket_read (unix_file_t * uf)
 
   n = recvmsg (uf->file_descriptor, &mh, 0);
 
+  /* Stop workers to avoid end of the world */
+  vlib_worker_thread_barrier_sync (vlib_get_main ());
+
   if (n != VHOST_USER_MSG_HDR_SZ)
     goto close_socket;
 
@@ -724,10 +727,12 @@ vhost_user_socket_read (unix_file_t * uf)
        goto close_socket;
     }
 
+  vlib_worker_thread_barrier_release (vlib_get_main ());
   return 0;
 
 close_socket:
   vhost_user_if_disconnect (vui);
+  vlib_worker_thread_barrier_release (vlib_get_main ());
   return 0;
 }