summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorQuentin Young <qlyoung@cumulusnetworks.com>2018-04-21 03:55:44 -0400
committerQuentin Young <qlyoung@cumulusnetworks.com>2018-05-29 19:06:16 +0000
commit92be6487a4001a596eb9dd4a4378fbed95e64bdc (patch)
tree498689f5a32e65239f27837d19d26fe3e76a98d7
parent329e35dab8e11298b3d93ae53335063d21492972 (diff)
zebra: fix some memory errors, scheduling bugs
* Add doc comments explaining hairy bits of thread lifecycle * Remove t_suicide as it no longer makes sense * Remove client double-free * Remove unnecessary THREAD_OFF being used in incorrect pthread context * Eliminate unnecessary racey access to client's obuf_fifo * Ensure zserv_process_messages() reschedules itself if it has not finished its work Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
-rw-r--r--zebra/zserv.c8
-rw-r--r--zebra/zserv.h3
2 files changed, 8 insertions, 3 deletions
diff --git a/zebra/zserv.c b/zebra/zserv.c
index 625174e241..fa5299850c 100644
--- a/zebra/zserv.c
+++ b/zebra/zserv.c
@@ -109,6 +109,14 @@ static void zebra_client_free(struct zserv *client)
assert(!client->t_read);
assert(!client->t_write);
+ /*
+ * Ensure these have been nulled. This does not equate to the
+ * associated task(s) being scheduled or unscheduled on the client
+ * pthread's threadmaster.
+ */
+ assert(!client->t_read);
+ assert(!client->t_write);
+
/* Close file descriptor. */
if (client->sock) {
unsigned long nroutes;
diff --git a/zebra/zserv.h b/zebra/zserv.h
index f466545fc8..c64ed3c677 100644
--- a/zebra/zserv.h
+++ b/zebra/zserv.h
@@ -73,9 +73,6 @@ struct zserv {
struct thread *t_read;
struct thread *t_write;
- /* Thread for delayed close. */
- struct thread *t_suicide;
-
/* default routing table this client munges */
int rtm_table;