diff options
| author | Quentin Young <qlyoung@cumulusnetworks.com> | 2018-04-21 03:55:44 -0400 |
|---|---|---|
| committer | Quentin Young <qlyoung@cumulusnetworks.com> | 2018-05-29 19:06:16 +0000 |
| commit | 92be6487a4001a596eb9dd4a4378fbed95e64bdc (patch) | |
| tree | 498689f5a32e65239f27837d19d26fe3e76a98d7 | |
| parent | 329e35dab8e11298b3d93ae53335063d21492972 (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.c | 8 | ||||
| -rw-r--r-- | zebra/zserv.h | 3 |
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; |
