X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fplugins%2Fmemif%2Fmemif.c;h=22f3e3dcdf162b202be16404d63877c023bc6964;hb=34c721fb47155135bf2173ca7b9a31aaacfde190;hp=37028d8223ecb7c6ef527f19927d828f3e2c3dc0;hpb=bf236630f518ae94bc2ef76f83b269b98dd109d4;p=vpp.git diff --git a/src/plugins/memif/memif.c b/src/plugins/memif/memif.c index 37028d8223e..22f3e3dcdf1 100644 --- a/src/plugins/memif/memif.c +++ b/src/plugins/memif/memif.c @@ -100,6 +100,8 @@ memif_disconnect (memif_if_t * mif, clib_error_t * err) memif_region_t *mr; memif_queue_t *mq; int i; + vlib_main_t *vm = vlib_get_main (); + int with_barrier = 0; if (mif == 0) return; @@ -141,6 +143,12 @@ memif_disconnect (memif_if_t * mif, clib_error_t * err) clib_mem_free (mif->sock); } + if (vlib_worker_thread_barrier_held () == 0) + { + with_barrier = 1; + vlib_worker_thread_barrier_sync (vm); + } + /* *INDENT-OFF* */ vec_foreach_index (i, mif->rx_queues) { @@ -198,6 +206,9 @@ memif_disconnect (memif_if_t * mif, clib_error_t * err) vec_free (mif->remote_name); vec_free (mif->remote_if_name); clib_fifo_free (mif->msg_queue); + + if (with_barrier) + vlib_worker_thread_barrier_release (vm); } static clib_error_t *