summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--watchquagga/ChangeLog11
-rw-r--r--watchquagga/watchquagga.c13
2 files changed, 19 insertions, 5 deletions
diff --git a/watchquagga/ChangeLog b/watchquagga/ChangeLog
index d40c1557..20f974ef 100644
--- a/watchquagga/ChangeLog
+++ b/watchquagga/ChangeLog
@@ -1,3 +1,14 @@
+2005-01-12 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
+
+ * watchquagga.c: (run_job) Fix bug: delay.tv_sec was being used
+ without having been initialized when the "force" argument was true.
+ (try_restart) When phased restart is stopping the routing daemons,
+ it should tell run_job to update the restart interval.
+ (phase_check) In final step of phased restart when the routing
+ daemons are being started again, tell run_job not to update
+ the restart interval (this is now done when the daemons are
+ stopped).
+
2004-12-29 Andrew J. Schorr <ajschorr@alumni.princeton.edu>
* watchquagga.c: In several places, cast pid_t to int for printf to
diff --git a/watchquagga/watchquagga.c b/watchquagga/watchquagga.c
index fb24d75c..772b4294 100644
--- a/watchquagga/watchquagga.c
+++ b/watchquagga/watchquagga.c
@@ -1,5 +1,5 @@
/*
- $Id: watchquagga.c,v 1.8 2004/12/29 17:45:08 ajs Exp $
+ $Id: watchquagga.c,v 1.9 2005/01/12 16:24:51 ajs Exp $
Monitor status of quagga daemons and restart if necessary.
@@ -484,8 +484,11 @@ run_job(struct restart_info *restart, const char *cmdtype, const char *command,
return -1;
}
- if (!force &&
- (time_elapsed(&delay,&restart->time)->tv_sec < restart->interval))
+ /* Note: time_elapsed test must come before the force test, since we need
+ to make sure that delay is initialized for use below in updating the
+ restart interval. */
+ if ((time_elapsed(&delay,&restart->time)->tv_sec < restart->interval) &&
+ !force)
{
if (gs.loglevel > LOG_DEBUG+1)
zlog_debug("postponing %s %s: "
@@ -861,7 +864,7 @@ phase_check(void)
for (dmn = gs.daemons; dmn; dmn = dmn->next)
{
if (dmn != gs.special)
- run_job(&dmn->restart,"start",gs.start_command,1,1);
+ run_job(&dmn->restart,"start",gs.start_command,1,0);
}
}
gs.phase = PHASE_NONE;
@@ -923,7 +926,7 @@ try_restart(struct daemon *dmn)
for (dmn = gs.daemons; dmn; dmn = dmn->next)
{
if (dmn != gs.special)
- run_job(&dmn->restart,"stop",gs.stop_command,1,0);
+ run_job(&dmn->restart,"stop",gs.stop_command,1,1);
}
set_phase(PHASE_STOPS_PENDING);
break;