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>
This commit is contained in:
Quentin Young 2018-04-21 03:55:44 -04:00
parent 329e35dab8
commit 92be6487a4
2 changed files with 8 additions and 3 deletions

View File

@ -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;

View File

@ -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;