*/
int get_next_update(struct rrd_database **dblist, const char **name)
{
- int i, sleeptime = 0, diff;
+ int i, sleeptime = -1, diff;
time_t now = time(0);
for (i = 0; dblist[i]; i++) {
+ if (dblist[i]->update_active)
+ continue;
+
diff = ROUND_UP(dblist[i]->last_update, dblist[i]->interval) - now;
diff = max(diff, dblist[i]->update_backoff - now);
- if (dblist[i]->update_active)
- diff = (now + dblist[i]->interval) % dblist[i]->interval;
-
- if (!sleeptime) {
- sleeptime = diff;
- *name = dblist[i]->name;
- }
- if (sleeptime > diff) {
+ if (sleeptime == -1 || sleeptime > diff) {
sleeptime = diff;
*name = dblist[i]->name;
}
}
- if (sleeptime == 0)
- sleeptime = -1;
-
return sleeptime;
}
char *args[10], argstr[ARGSTR_LEN];
char buf[16];
int idx = 0, argcnt = 0;
- int ofd, efd, child;
+ int ofd, child;
int ret;
add_arg(args, argcnt, argstr, idx, RRDTOOL_CMD);
add_arg(args, argcnt, argstr, idx, "last");
add_arg(args, argcnt, argstr, idx, db->filename);
- child = run_piped(cmd, args, NULL, &ofd, &efd);
+ child = run_piped(cmd, args, NULL, &ofd, NULL);
ret = read(ofd, buf, sizeof(buf) - 1);
if (ret < 0) {
pr_err("Error reading: %m\n");
pr_info("Last update for %s is: %ld, %ld sec ago\n", db->name, db->last_update,
time(NULL) - db->last_update);
+ close(ofd);
clear_zombie(child);
return 0;