From: Quentin Young Date: Sat, 21 Apr 2018 07:55:44 +0000 (-0400) Subject: zebra: fix some memory errors, scheduling bugs X-Git-Tag: frr-6.1-dev~363^2~16 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=92be6487a4001a596eb9dd4a4378fbed95e64bdc;p=mirror%2Ffrr.git 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 --- 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;