summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJafar Al-Gharaibeh <Jafaral@users.noreply.github.com>2017-06-30 10:35:28 -0500
committerGitHub <noreply@github.com>2017-06-30 10:35:28 -0500
commit1d0ca3ebf3ca33f37e23a437dd16e8473a347eb6 (patch)
treeaa5619148f19625996108b572e38811d834437a5
parentb5a46fd2a6e047576ad6869e4fb4c4ac10fd3773 (diff)
parente49b20cecc8ce7b52aa23294fefb79b887d8271b (diff)
Merge pull request #770 from donaldsharp/zclient
Zclient
-rw-r--r--babeld/babel_zebra.c1
-rw-r--r--eigrpd/eigrpd.c6
-rw-r--r--isisd/isis_main.c1
-rw-r--r--isisd/isis_zebra.c7
-rw-r--r--isisd/isis_zebra.h2
-rw-r--r--lib/thread.c2
-rw-r--r--nhrpd/nhrp_route.c1
-rw-r--r--ospf6d/ospf6_main.c5
-rw-r--r--ospfd/ospfd.c2
-rw-r--r--pimd/pim_zlookup.c1
-rw-r--r--pimd/pimd.c9
-rw-r--r--ripd/rip_main.c2
-rw-r--r--ripd/rip_zebra.c7
-rw-r--r--ripd/ripd.h1
-rw-r--r--ripngd/ripng_main.c1
-rw-r--r--ripngd/ripng_zebra.c7
-rw-r--r--ripngd/ripngd.h1
17 files changed, 52 insertions, 4 deletions
diff --git a/babeld/babel_zebra.c b/babeld/babel_zebra.c
index d8b8919e21..3a7a52ccca 100644
--- a/babeld/babel_zebra.c
+++ b/babeld/babel_zebra.c
@@ -400,4 +400,5 @@ void
babel_zebra_close_connexion(void)
{
zclient_stop(zclient);
+ zclient_free(zclient);
}
diff --git a/eigrpd/eigrpd.c b/eigrpd/eigrpd.c
index a0ead05224..2fa8296ce2 100644
--- a/eigrpd/eigrpd.c
+++ b/eigrpd/eigrpd.c
@@ -267,8 +267,10 @@ eigrp_finish (struct eigrp *eigrp)
&& (listcount(eigrp_om->eigrp) == 0))
{
if (zclient)
- zclient_free (zclient);
-
+ {
+ zclient_stop (zclient);
+ zclient_free (zclient);
+ }
exit(0);
}
diff --git a/isisd/isis_main.c b/isisd/isis_main.c
index 58070c7f2a..674592f46b 100644
--- a/isisd/isis_main.c
+++ b/isisd/isis_main.c
@@ -101,6 +101,7 @@ void sigusr1(void);
static __attribute__((__noreturn__)) void
terminate (int i)
{
+ isis_zebra_stop ();
exit (i);
}
diff --git a/isisd/isis_zebra.c b/isisd/isis_zebra.c
index 0009dd5e27..af77250a01 100644
--- a/isisd/isis_zebra.c
+++ b/isisd/isis_zebra.c
@@ -720,3 +720,10 @@ isis_zebra_init (struct thread_master *master)
return;
}
+
+void
+isis_zebra_stop (void)
+{
+ zclient_stop (zclient);
+ zclient_free (zclient);
+}
diff --git a/isisd/isis_zebra.h b/isisd/isis_zebra.h
index 621c32c363..82d5a48d3e 100644
--- a/isisd/isis_zebra.h
+++ b/isisd/isis_zebra.h
@@ -25,6 +25,8 @@
extern struct zclient *zclient;
void isis_zebra_init(struct thread_master *);
+void isis_zebra_stop(void);
+
void isis_zebra_route_update (struct prefix *prefix,
struct isis_route_info *route_info);
int isis_distribute_list_update (int routetype);
diff --git a/lib/thread.c b/lib/thread.c
index bc52d1b134..801168a799 100644
--- a/lib/thread.c
+++ b/lib/thread.c
@@ -1320,7 +1320,7 @@ thread_fetch (struct thread_master *m, struct thread *fetch)
struct timeval now;
struct timeval zerotime = { 0, 0 };
struct timeval tv;
- struct timeval *tw;
+ struct timeval *tw = NULL;
int num = 0;
diff --git a/nhrpd/nhrp_route.c b/nhrpd/nhrp_route.c
index 7f8cad6e92..89972f8f98 100644
--- a/nhrpd/nhrp_route.c
+++ b/nhrpd/nhrp_route.c
@@ -379,6 +379,7 @@ void nhrp_zebra_init(void)
void nhrp_zebra_terminate(void)
{
zclient_stop(zclient);
+ zclient_free(zclient);
route_table_finish(zebra_rib[AFI_IP]);
route_table_finish(zebra_rib[AFI_IP6]);
}
diff --git a/ospf6d/ospf6_main.c b/ospf6d/ospf6_main.c
index f69c1e1bca..0a4a3a28c3 100644
--- a/ospf6d/ospf6_main.c
+++ b/ospf6d/ospf6_main.c
@@ -110,7 +110,10 @@ ospf6_exit (int status)
cmd_terminate ();
if (zclient)
- zclient_free (zclient);
+ {
+ zclient_stop (zclient);
+ zclient_free (zclient);
+ }
if (master)
thread_master_free (master);
diff --git a/ospfd/ospfd.c b/ospfd/ospfd.c
index 38213aeb6a..9af9f7f314 100644
--- a/ospfd/ospfd.c
+++ b/ospfd/ospfd.c
@@ -497,6 +497,8 @@ ospf_terminate (void)
* One or more ospf_finish()'s may have deferred shutdown to a timer
* thread
*/
+ zclient_stop (zclient);
+ zclient_free (zclient);
}
void
diff --git a/pimd/pim_zlookup.c b/pimd/pim_zlookup.c
index 779cc14183..e7ffe0f4ad 100644
--- a/pimd/pim_zlookup.c
+++ b/pimd/pim_zlookup.c
@@ -115,6 +115,7 @@ static void zclient_lookup_failed(struct zclient *zlookup)
void
zclient_lookup_free (void)
{
+ zclient_stop (zlookup);
zclient_free (zlookup);
zlookup = NULL;
}
diff --git a/pimd/pimd.c b/pimd/pimd.c
index c31d2a99a1..ec1fe5b6d0 100644
--- a/pimd/pimd.c
+++ b/pimd/pimd.c
@@ -313,6 +313,8 @@ void pim_init()
void pim_terminate()
{
+ struct zclient *zclient;
+
pim_free();
/* reverse prefix_list_init */
@@ -321,4 +323,11 @@ void pim_terminate()
prefix_list_reset ();
pim_vrf_terminate ();
+
+ zclient = pim_zebra_zclient_get ();
+ if (zclient)
+ {
+ zclient_stop (zclient);
+ zclient_free (zclient);
+ }
}
diff --git a/ripd/rip_main.c b/ripd/rip_main.c
index 38c2875949..1a7d03bca1 100644
--- a/ripd/rip_main.c
+++ b/ripd/rip_main.c
@@ -100,6 +100,8 @@ sigint (void)
if (! retain_mode)
rip_clean ();
+ rip_zclient_stop ();
+
exit (0);
}
diff --git a/ripd/rip_zebra.c b/ripd/rip_zebra.c
index 337555b0b7..31204872ac 100644
--- a/ripd/rip_zebra.c
+++ b/ripd/rip_zebra.c
@@ -711,3 +711,10 @@ rip_zclient_init (struct thread_master *master)
install_element (RIP_NODE, &rip_default_information_originate_cmd);
install_element (RIP_NODE, &no_rip_default_information_originate_cmd);
}
+
+void
+rip_zclient_stop (void)
+{
+ zclient_stop (zclient);
+ zclient_free (zclient);
+}
diff --git a/ripd/ripd.h b/ripd/ripd.h
index d52df0d992..a8e65d1236 100644
--- a/ripd/ripd.h
+++ b/ripd/ripd.h
@@ -388,6 +388,7 @@ extern void rip_if_down_all (void);
extern void rip_route_map_init (void);
extern void rip_route_map_reset (void);
extern void rip_zclient_init(struct thread_master *);
+extern void rip_zclient_stop(void);
extern void rip_zclient_reset (void);
extern void rip_offset_init (void);
extern int if_check_address (struct in_addr addr);
diff --git a/ripngd/ripng_main.c b/ripngd/ripng_main.c
index e517817147..9d700305ed 100644
--- a/ripngd/ripng_main.c
+++ b/ripngd/ripng_main.c
@@ -103,6 +103,7 @@ sigint (void)
if (! retain_mode)
ripng_clean ();
+ ripng_zebra_stop ();
exit (0);
}
diff --git a/ripngd/ripng_zebra.c b/ripngd/ripng_zebra.c
index 2d62823b11..465d33992f 100644
--- a/ripngd/ripng_zebra.c
+++ b/ripngd/ripng_zebra.c
@@ -557,3 +557,10 @@ zebra_init (struct thread_master *master)
install_element (RIPNG_NODE, &ripng_redistribute_type_metric_routemap_cmd);
install_element (RIPNG_NODE, &no_ripng_redistribute_type_cmd);
}
+
+void
+ripng_zebra_stop (void)
+{
+ zclient_stop (zclient);
+ zclient_free (zclient);
+}
diff --git a/ripngd/ripngd.h b/ripngd/ripngd.h
index 62b7b073f8..ce8ea07a41 100644
--- a/ripngd/ripngd.h
+++ b/ripngd/ripngd.h
@@ -353,6 +353,7 @@ extern void ripng_route_map_reset (void);
extern void ripng_terminate (void);
/* zclient_init() is done by ripng_zebra.c:zebra_init() */
extern void zebra_init(struct thread_master *);
+extern void ripng_zebra_stop (void);
extern void ripng_zclient_reset (void);
extern void ripng_offset_init (void);