From 5904f19fdf5160ba5c420327a273ad1a93eeabdc Mon Sep 17 00:00:00 2001 From: Renato Westphal Date: Mon, 28 Nov 2016 18:55:01 -0200 Subject: [PATCH] isisd: create the isis_circuit_prepare() helper function This reduces code duplication and the likelihood of a bug like 186534 ("isisd: fix loss of packets after circuit is brought up") to happen again. Signed-off-by: Renato Westphal --- isisd/isis_circuit.c | 20 +++++++++++++------- isisd/isis_circuit.h | 1 + isisd/isis_pdu.c | 12 +----------- 3 files changed, 15 insertions(+), 18 deletions(-) diff --git a/isisd/isis_circuit.c b/isisd/isis_circuit.c index 0332023f34..ea3f18a439 100644 --- a/isisd/isis_circuit.c +++ b/isisd/isis_circuit.c @@ -607,6 +607,18 @@ isis_circuit_stream(struct isis_circuit *circuit, struct stream **stream) } } +void +isis_circuit_prepare (struct isis_circuit *circuit) +{ +#ifdef GNU_LINUX + THREAD_READ_ON (master, circuit->t_read, isis_receive, circuit, + circuit->fd); +#else + THREAD_TIMER_MSEC_ON (master, circuit->t_read, isis_receive, circuit, + listcount (circuit->area->circuit_list) * 100); +#endif +} + int isis_circuit_up (struct isis_circuit *circuit) { @@ -716,13 +728,7 @@ isis_circuit_up (struct isis_circuit *circuit) isis_circuit_stream(circuit, &circuit->rcv_stream); isis_circuit_stream(circuit, &circuit->snd_stream); -#ifdef GNU_LINUX - THREAD_READ_ON (master, circuit->t_read, isis_receive, circuit, - circuit->fd); -#else - THREAD_TIMER_MSEC_ON (master, circuit->t_read, isis_receive, circuit, - listcount (circuit->area->circuit_list) * 100); -#endif + isis_circuit_prepare (circuit); circuit->lsp_queue = list_new (); circuit->lsp_queue_last_cleared = time (NULL); diff --git a/isisd/isis_circuit.h b/isisd/isis_circuit.h index efe153f32e..035e558c0a 100644 --- a/isisd/isis_circuit.h +++ b/isisd/isis_circuit.h @@ -168,6 +168,7 @@ void isis_circuit_add_addr (struct isis_circuit *circuit, struct connected *conn); void isis_circuit_del_addr (struct isis_circuit *circuit, struct connected *conn); +void isis_circuit_prepare (struct isis_circuit *circuit); int isis_circuit_up (struct isis_circuit *circuit); void isis_circuit_down (struct isis_circuit *); void circuit_update_nlpids (struct isis_circuit *circuit); diff --git a/isisd/isis_pdu.c b/isisd/isis_pdu.c index 39d2df74b6..2965a97dc6 100644 --- a/isisd/isis_pdu.c +++ b/isisd/isis_pdu.c @@ -2165,17 +2165,7 @@ isis_receive (struct thread *thread) * prepare for next packet. */ if (!circuit->is_passive) - { -#ifdef GNU_LINUX - THREAD_READ_ON (master, circuit->t_read, isis_receive, circuit, - circuit->fd); -#else - circuit->t_read = thread_add_timer_msec (master, isis_receive, circuit, - listcount - (circuit->area->circuit_list) * - 100); -#endif - } + isis_circuit_prepare (circuit); return retval; } -- 2.39.5