]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - audiod.c
Merge branch 't/aes'
[paraslash.git] / audiod.c
index 9ed319f4c27ab7e202082552f1a0ffa9328fe60f..f12dbc1b999a0892abdcea5791692f1f5dfab3c3 100644 (file)
--- a/audiod.c
+++ b/audiod.c
@@ -5,8 +5,14 @@
  */
 
 /** \file audiod.c The paraslash's audio daemon. */
+
+#include <netinet/in.h>
+#include <sys/socket.h>
 #include <regex.h>
 #include <sys/types.h>
+#include <arpa/inet.h>
+#include <sys/un.h>
+#include <netdb.h>
 #include <signal.h>
 
 #include "para.h"
@@ -1031,22 +1037,35 @@ static int command_post_select(struct sched *s, struct task *t)
        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)