[PATCH] examples/vhost: fix hang on exit
Maxime Coquelin
maxime.coquelin at redhat.com
Thu Oct 29 16:48:33 CET 2026
On 10/29/26 3:47 PM, Stephen Hemminger wrote:
> destroy_device() waits for the worker lcore to ack device removal.
> Since the signal handler rework, the workers exit before the vhost
> drivers are unregistered, so the destroy callback spins forever.
>
> Unregister the drivers while the workers are still polling, then
> stop and join them.
>
> Bugzilla ID: 2071
> Fixes: 5ffa8fafcbd3 ("examples/vhost: make signal handler safe")
> Cc: stable at dpdk.org
>
> Reported-by: Yu Jiang <yux.jiang at intel.com>
> Signed-off-by: Stephen Hemminger <stephen at networkplumber.org>
> ---
> examples/vhost/main.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/examples/vhost/main.c b/examples/vhost/main.c
> index 523195f5c4..16c9387f8f 100644
> --- a/examples/vhost/main.c
> +++ b/examples/vhost/main.c
> @@ -69,6 +69,8 @@ static uint32_t enabled_port_mask = 0;
> /* Set by the SIGINT handler to stop the worker loops. */
> static volatile sig_atomic_t quit;
>
> +static RTE_ATOMIC(bool) stop_workers;
> +
> /* Promiscuous mode */
> static uint32_t promiscuous;
>
> @@ -1242,7 +1244,7 @@ switch_worker(void *arg)
> }
> }
>
> - while (!quit) {
> + while (!rte_atomic_load_explicit(&stop_workers, rte_memory_order_relaxed)) {
> drain_mbuf_table(tx_q);
> drain_vhost_table();
> /*
Are you sure you committed all the changes? I don't see a store of true
to stop_workers.
More information about the dev
mailing list