[cmaster-next] [PATCH 2/2] isisd: create the isis_circuit_prepare() helper function

Renato Westphal renato at opensourcerouting.org
Mon Nov 28 16:02:18 EST 2016


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 <renato at opensourcerouting.org>
---
 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 0332023..ea3f18a 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 efe153f..035e558 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 39d2df7..2965a97 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;
 }
-- 
1.9.1





More information about the dev mailing list