int ret;
struct command_task *ct = container_of(t, struct command_task, task);
static struct timeval last_status_dump;
- struct timeval tmp, delay = {5, 0};
- bool force = false;
-
- tv_add(&last_status_dump, &delay, &tmp);
- if (tv_diff(&tmp, now, NULL) < 0) {
- last_status_dump = *now;
- force = true;
- }
+ struct timeval tmp, delay;
+ bool force = true;
ret = handle_connect(ct->fd, &s->rfds);
if (ret < 0)
PARA_ERROR_LOG("%s\n", para_strerror(-ret));
else if (ret > 0)
- force = true;
+ goto dump;
+
+ /* if last status dump was less than 500ms ago, do nothing */
+ delay.tv_sec = 0;
+ delay.tv_usec = 500 * 1000;
+ tv_add(&last_status_dump, &delay, &tmp);
+ if (tv_diff(now, &tmp, NULL) < 0)
+ return 0;
+
+ /*
+ * If last status dump was more than 5s ago, force update. Otherwise,
+ * update only those items that have changed.
+ */
+ delay.tv_sec = 5;
+ delay.tv_usec = 0;
+ tv_add(&last_status_dump, &delay, &tmp);
+ if (tv_diff(now, &tmp, NULL) < 0)
+ force = false;
+dump:
audiod_status_dump(force);
- return 0;
+ last_status_dump = *now;
+ return 1;
}
static void init_command_task(struct command_task *ct)