From 275e0ed7f6b7c3d9fcecf2ee7abb8e5c05aa5b4c Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Fri, 30 Aug 2019 06:03:09 -0400 Subject: [PATCH] ospfd: Do not turn on write thread unless we have something in it I am rarely seeing this crash: r2: ospfd crashed. Core file found - Backtrace follows: [New LWP 32748] [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/aarch64-linux-gnu/libthread_db.so.1". Core was generated by `/usr/lib/frr/ospfd'. Program terminated with signal SIGABRT, Aborted. 2019-08-29 15:59:36,149 ERROR: assert failed at "test_ospf_sr_topo1/test_memory_leak": Which translates to this code: node = listhead(ospf->oi_write_q); assert(node); oi = listgetdata(node); assert(oi); So if we get into ospf_write without anything on the oi_write_q we are stopping the program. The only place that I see where we could possibly have this condition was in OSPF_ISM_WRITE_ON(O). Modify the macro to not just blindly turn on ospf_write since we do not always add to the oi_write_q. Signed-off-by: Donald Sharp --- ospfd/ospf_ism.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/ospfd/ospf_ism.h b/ospfd/ospf_ism.h index 5ae99ab32070..8d21403695fa 100644 --- a/ospfd/ospf_ism.h +++ b/ospfd/ospf_ism.h @@ -53,8 +53,9 @@ listnode_add((O)->oi_write_q, oi); \ oi->on_write_q = 1; \ } \ - thread_add_write(master, ospf_write, (O), (O)->fd, \ - &(O)->t_write); \ + if (!list_isempty((O)->oi_write_q)) \ + thread_add_write(master, ospf_write, (O), (O)->fd, \ + &(O)->t_write); \ } while (0) /* Macro for OSPF ISM timer turn on. */