diff options
| author | Quentin Young <qlyoung@cumulusnetworks.com> | 2017-04-24 22:33:25 +0000 |
|---|---|---|
| committer | Quentin Young <qlyoung@cumulusnetworks.com> | 2017-05-09 20:44:19 +0000 |
| commit | ffa2c8986d204f4a3e7204258fd6906af4a57c93 (patch) | |
| tree | 6242b8634bc2a264339a05dcfb20b94f63c252f4 /ospfd/ospf_packet.c | |
| parent | 7a78dea34d20e44539ccabb1b97e029003be4b40 (diff) | |
*: remove THREAD_ON macros, add nullity check
The way thread.c is written, a caller who wishes to be able to cancel a
thread or avoid scheduling it twice must keep a reference to the thread.
Typically this is done with a long lived pointer whose value is checked
for null in order to know if the thread is currently scheduled. The
check-and-schedule idiom is so common that several wrapper macros in
thread.h existed solely to provide it.
This patch removes those macros and adds a new parameter to all
thread_add_* functions which is a pointer to the struct thread * to
store the result of a scheduling call. If the value passed is non-null,
the thread will only be scheduled if the value is null. This helps with
consistency.
A Coccinelle spatch has been used to transform code of the form:
if (t == NULL)
t = thread_add_* (...)
to the form
thread_add_* (..., &t)
The THREAD_ON macros have also been transformed to the underlying
thread.c calls.
Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
Diffstat (limited to 'ospfd/ospf_packet.c')
| -rw-r--r-- | ospfd/ospf_packet.c | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/ospfd/ospf_packet.c b/ospfd/ospf_packet.c index b7721adb3e..6b5b0e4edd 100644 --- a/ospfd/ospf_packet.c +++ b/ospfd/ospf_packet.c @@ -487,7 +487,7 @@ ospf_ls_req_event (struct ospf_neighbor *nbr) thread_cancel (nbr->t_ls_req); nbr->t_ls_req = NULL; } - nbr->t_ls_req = thread_add_event (master, ospf_ls_req_timer, nbr, 0); + nbr->t_ls_req = thread_add_event(master, ospf_ls_req_timer, nbr, 0, NULL); } /* Cyclic timer function. Fist registered in ospf_nbr_new () in @@ -852,7 +852,7 @@ ospf_write (struct thread *thread) /* If packets still remain in queue, call write thread. */ if (!list_isempty (ospf->oi_write_q)) ospf->t_write = - thread_add_write (master, ospf_write, ospf, ospf->fd); + thread_add_write(master, ospf_write, ospf, ospf->fd, NULL); return 0; } @@ -2772,7 +2772,7 @@ ospf_read (struct thread *thread) ospf = THREAD_ARG (thread); /* prepare for next packet. */ - ospf->t_read = thread_add_read (master, ospf_read, ospf, ospf->fd); + ospf->t_read = thread_add_read(master, ospf_read, ospf, ospf->fd, NULL); stream_reset(ospf->ibuf); if (!(ibuf = ospf_recv_packet (ospf->fd, &ifp, ospf->ibuf))) @@ -3803,7 +3803,7 @@ ospf_ls_upd_send_queue_event (struct thread *thread) zlog_debug ("ospf_ls_upd_send_queue: update lists not cleared," " %d nodes to try again, raising new event", again); oi->t_ls_upd_event = - thread_add_event (master, ospf_ls_upd_send_queue_event, oi, 0); + thread_add_event(master, ospf_ls_upd_send_queue_event, oi, 0, NULL); } if (IS_DEBUG_OSPF_EVENT) @@ -3858,9 +3858,8 @@ ospf_ls_upd_send (struct ospf_neighbor *nbr, struct list *update, int flag) for (ALL_LIST_ELEMENTS_RO (update, node, lsa)) listnode_add (rn->info, ospf_lsa_lock (lsa)); /* oi->ls_upd_queue */ - if (oi->t_ls_upd_event == NULL) - oi->t_ls_upd_event = - thread_add_event (master, ospf_ls_upd_send_queue_event, oi, 0); + thread_add_event(master, ospf_ls_upd_send_queue_event, oi, 0, + &oi->t_ls_upd_event); } static void @@ -3921,9 +3920,8 @@ ospf_ls_ack_send (struct ospf_neighbor *nbr, struct ospf_lsa *lsa) listnode_add (oi->ls_ack_direct.ls_ack, ospf_lsa_lock (lsa)); - if (oi->t_ls_ack_direct == NULL) - oi->t_ls_ack_direct = - thread_add_event (master, ospf_ls_ack_send_event, oi, 0); + thread_add_event(master, ospf_ls_ack_send_event, oi, 0, + &oi->t_ls_ack_direct); } /* Send Link State Acknowledgment delayed. */ |
