diff options
author | Quentin Young <qlyoung@cumulusnetworks.com> | 2017-04-25 00:33:25 +0200 |
---|---|---|
committer | Quentin Young <qlyoung@cumulusnetworks.com> | 2017-05-09 22:44:19 +0200 |
commit | ffa2c8986d204f4a3e7204258fd6906af4a57c93 (patch) | |
tree | 6242b8634bc2a264339a05dcfb20b94f63c252f4 /watchfrr/watchfrr.c | |
parent | Merge pull request #478 from opensourcerouting/test-extension (diff) | |
download | frr-ffa2c8986d204f4a3e7204258fd6906af4a57c93.tar.xz frr-ffa2c8986d204f4a3e7204258fd6906af4a57c93.zip |
*: 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 'watchfrr/watchfrr.c')
-rw-r--r-- | watchfrr/watchfrr.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/watchfrr/watchfrr.c b/watchfrr/watchfrr.c index 6edce242b..967678633 100644 --- a/watchfrr/watchfrr.c +++ b/watchfrr/watchfrr.c @@ -374,7 +374,7 @@ static int restart_kill(struct thread *t_kill) kill(-restart->pid, (restart->kills ? SIGKILL : SIGTERM)); restart->kills++; restart->t_kill = thread_add_timer(master, restart_kill, restart, - gs.restart_timeout); + gs.restart_timeout, NULL); return 0; } @@ -489,7 +489,7 @@ run_job(struct restart_info *restart, const char *cmdtype, const char *command, if ((restart->pid = run_background(cmd)) > 0) { restart->t_kill = thread_add_timer(master, restart_kill, restart, - gs.restart_timeout); + gs.restart_timeout, NULL); restart->what = cmdtype; gs.numpids++; } else @@ -510,19 +510,19 @@ run_job(struct restart_info *restart, const char *cmdtype, const char *command, } #define SET_READ_HANDLER(DMN) \ - (DMN)->t_read = thread_add_read(master,handle_read,(DMN),(DMN)->fd) + (DMN)->t_read = thread_add_read(master,handle_read,(DMN),(DMN)->fd, NULL) #define SET_WAKEUP_DOWN(DMN) \ (DMN)->t_wakeup = thread_add_timer_msec(master,wakeup_down,(DMN), \ - FUZZY(gs.period)) + FUZZY(gs.period), NULL) #define SET_WAKEUP_UNRESPONSIVE(DMN) \ (DMN)->t_wakeup = thread_add_timer_msec(master,wakeup_unresponsive,(DMN), \ - FUZZY(gs.period)) + FUZZY(gs.period), NULL) #define SET_WAKEUP_ECHO(DMN) \ (DMN)->t_wakeup = thread_add_timer_msec(master,wakeup_send_echo,(DMN), \ - FUZZY(gs.period)) + FUZZY(gs.period), NULL) static int wakeup_down(struct thread *t_wakeup) { @@ -776,10 +776,11 @@ static int try_connect(struct daemon *dmn) dmn->state = DAEMON_CONNECTING; dmn->fd = sock; dmn->t_write = - thread_add_write(master, check_connect, dmn, dmn->fd); + thread_add_write(master, check_connect, dmn, dmn->fd, + NULL); dmn->t_wakeup = thread_add_timer(master, wakeup_connect_hanging, dmn, - gs.timeout); + gs.timeout, NULL); SET_READ_HANDLER(dmn); return 0; } @@ -805,7 +806,7 @@ static void set_phase(restart_phase_t new_phase) if (gs.t_phase_hanging) thread_cancel(gs.t_phase_hanging); gs.t_phase_hanging = thread_add_timer(master, phase_hanging, NULL, - PHASE_TIMEOUT); + PHASE_TIMEOUT, NULL); } static void phase_check(void) @@ -963,7 +964,8 @@ static int wakeup_send_echo(struct thread *t_wakeup) } else { gettimeofday(&dmn->echo_sent, NULL); dmn->t_wakeup = - thread_add_timer(master, wakeup_no_answer, dmn, gs.timeout); + thread_add_timer(master, wakeup_no_answer, dmn, + gs.timeout, NULL); } return 0; } @@ -1312,7 +1314,8 @@ int main(int argc, char **argv) dmn->fd = -1; dmn->t_wakeup = thread_add_timer_msec(master, wakeup_init, dmn, - 100 + (random() % 900)); + 100 + (random() % 900), + NULL); dmn->restart.interval = gs.min_restart_interval; if (tail) tail->next = dmn; |