The notifier is used only to call the downscript. Avoid extra notifier for other cases.
Signed-off-by: Vladimir Sementsov-Ogievskiy <vsement...@yandex-team.ru> --- net/tap.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/net/tap.c b/net/tap.c index 44bd6eefd8..c07af762b0 100644 --- a/net/tap.c +++ b/net/tap.c @@ -384,8 +384,10 @@ static void tap_cleanup(NetClientState *nc) qemu_purge_queued_packets(nc); - tap_exit_notify(&s->exit, NULL); - qemu_remove_exit_notifier(&s->exit); + if (s->exit.notify) { + tap_exit_notify(&s->exit, NULL); + qemu_remove_exit_notifier(&s->exit); + } tap_read_poll(s, false); tap_write_poll(s, false); @@ -787,9 +789,7 @@ static int net_tap_fd_init_common(const Netdev *netdev, NetClientState *peer, } tap_read_poll(s, true); s->vhost_net = NULL; - - s->exit.notify = tap_exit_notify; - qemu_add_exit_notifier(&s->exit); + s->exit.notify = NULL; if (netdev->type == NET_CLIENT_DRIVER_BRIDGE) { const NetdevBridgeOptions *bridge = &netdev->u.bridge; @@ -817,6 +817,8 @@ static int net_tap_fd_init_common(const Netdev *netdev, NetClientState *peer, snprintf(s->down_script, sizeof(s->down_script), "%s", downscript); snprintf(s->down_script_arg, sizeof(s->down_script_arg), "%s", ifname); + s->exit.notify = tap_exit_notify; + qemu_add_exit_notifier(&s->exit); } } -- 2.48.1