]> git.puffer.fish Git - matthieu/frr.git/commitdiff
zebra: bfd message handling cleanup foo
authorQuentin Young <qlyoung@cumulusnetworks.com>
Tue, 14 Jan 2020 18:55:55 +0000 (13:55 -0500)
committerQuentin Young <qlyoung@cumulusnetworks.com>
Wed, 15 Jan 2020 17:54:58 +0000 (12:54 -0500)
Previous patches introduced various issues:
- Removal of stream_free() to fix double free caused memleak
- Patch for memleak was incomplete

This should fix it hopefully.

Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
zebra/zebra_ptm.c

index 757623a04e665eabcfa5013d7cb4f5de6dd037b6..d7bbe779bdb15462b198f0f51a0a8b02b086794a 100644 (file)
@@ -1295,6 +1295,7 @@ static void zebra_ptm_send_bfdd(struct stream *msg)
        }
 
        stream_free(msgc);
+       stream_free(msg);
 }
 
 static void zebra_ptm_send_clients(struct stream *msg)
@@ -1326,6 +1327,7 @@ static void zebra_ptm_send_clients(struct stream *msg)
        }
 
        stream_free(msgc);
+       stream_free(msg);
 }
 
 static int _zebra_ptm_bfd_client_deregister(struct zserv *zs)
@@ -1367,8 +1369,6 @@ static int _zebra_ptm_bfd_client_deregister(struct zserv *zs)
 
        zebra_ptm_send_bfdd(msg);
 
-       stream_free(msg);
-
        pp_free(pp);
 
        return 0;
@@ -1423,6 +1423,7 @@ static void _zebra_ptm_reroute(struct zserv *zs, struct zebra_vrf *zvrf,
        stream_putw_at(msgc, 0, STREAM_READABLE(msgc));
 
        zebra_ptm_send_bfdd(msgc);
+       msgc = NULL;
 
        /* Registrate process PID for shutdown hook. */
        STREAM_GETL(msg, ppid);
@@ -1431,7 +1432,8 @@ static void _zebra_ptm_reroute(struct zserv *zs, struct zebra_vrf *zvrf,
        return;
 
 stream_failure:
-       stream_free(msgc);
+       if (msgc)
+               stream_free(msgc);
        zlog_err("%s:%d failed to registrate client pid", __FILE__, __LINE__);
 }