summaryrefslogtreecommitdiffstats
path: root/watchfrr/watchfrr.c
diff options
context:
space:
mode:
authorQuentin Young <qlyoung@cumulusnetworks.com>2017-04-25 00:33:25 +0200
committerQuentin Young <qlyoung@cumulusnetworks.com>2017-05-09 22:44:19 +0200
commitffa2c8986d204f4a3e7204258fd6906af4a57c93 (patch)
tree6242b8634bc2a264339a05dcfb20b94f63c252f4 /watchfrr/watchfrr.c
parentMerge pull request #478 from opensourcerouting/test-extension (diff)
downloadfrr-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.c25
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;