]> git.puffer.fish Git - matthieu/frr.git/commitdiff
zebra: Fix crash in shutdown w/ pw thread still running
authorDonald Sharp <sharpd@nvidia.com>
Thu, 11 Aug 2022 18:59:17 +0000 (14:59 -0400)
committerDonald Sharp <sharpd@nvidia.com>
Thu, 11 Aug 2022 20:31:28 +0000 (16:31 -0400)
I am seeing the zebra_pw_install_retry timer thread crashing
on shutdown

The shutdown of the timer is only in an
if () {
   ...
} else if

Let's just always shut it down.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
zebra/zebra_pw.c

index 6dde513f4044cca8e25338c82ddbf6db6fcccfc6..be089fc7594c8bf55ea6db7e8b6617c3f711543a 100644 (file)
@@ -101,13 +101,15 @@ void zebra_pw_del(struct zebra_vrf *zvrf, struct zebra_pw *pw)
        if (pw->status == PW_FORWARDING) {
                hook_call(pw_uninstall, pw);
                dplane_pw_uninstall(pw);
-       } else if (pw->install_retry_timer)
-               THREAD_OFF(pw->install_retry_timer);
+       }
+
+       THREAD_OFF(pw->install_retry_timer);
 
        /* unlink and release memory */
        RB_REMOVE(zebra_pw_head, &zvrf->pseudowires, pw);
        if (pw->protocol == ZEBRA_ROUTE_STATIC)
                RB_REMOVE(zebra_static_pw_head, &zvrf->static_pseudowires, pw);
+
        XFREE(MTYPE_PW, pw);
 }
 
@@ -230,7 +232,6 @@ static void zebra_pw_install_retry(struct thread *thread)
 {
        struct zebra_pw *pw = THREAD_ARG(thread);
 
-       pw->install_retry_timer = NULL;
        zebra_pw_install(pw);
 }