Handle pselect errors
authorSiraaj Khandkar <siraaj@khandkar.net>
Wed, 25 Mar 2020 01:43:35 +0000 (21:43 -0400)
committerSiraaj Khandkar <siraaj@khandkar.net>
Wed, 25 Mar 2020 01:43:35 +0000 (21:43 -0400)
x5/khatus.c

index 6ffa538..117fb98 100644 (file)
@@ -429,8 +429,19 @@ fifo_read_all(Config *cfg, struct timespec *ti, char *buf)
        debug("selecting...\n");
        ready = pselect(maxfd + 1, &fds, NULL, NULL, ti, NULL);
        debug("ready: %d\n", ready);
-       assert(ready >= 0);
        clock_gettime(CLOCK_MONOTONIC, &t);
+       if (ready == -1) {
+               switch (errno) {
+               case EINTR:
+                       error("pselect temp failure: %d, errno: %d, msg: %s\n",
+                           ready, errno, strerror(errno));
+                       /* TODO: Reconsider what to do here. */
+                       return;
+               default:
+                       error("pselect failed: %d, errno: %d, msg: %s\n",
+                           ready, errno, strerror(errno));
+               }
+       }
        /* At-least-once ensures that expiries are still checked on timeouts. */
        do {
                for (Fifo *f = cfg->fifos; f; f = f->next) {
This page took 0.022645 seconds and 4 git commands to generate.