]> git.meshlink.io Git - catta/blobdiff - src/simple-watch.c
check for failure of catta_set_nonblock in simple-watch and iface-windows
[catta] / src / simple-watch.c
index 2992d87108075144468a4110f469b90770515129..a7b4e4218024aed1c1194d5c231e0b12230a86cb 100644 (file)
@@ -33,6 +33,7 @@
 #include <catta/malloc.h>
 #include <catta/timeval.h>
 #include <catta/simple-watch.h>
+#include <catta/log.h>
 #include "fdutil.h"                 // catta_set_nonblock
 #include "internal.h"               // closesocket
 
@@ -317,13 +318,16 @@ CattaSimplePoll *catta_simple_poll_new(void) {
 
     winsock_init();  // on Windows, pipe uses sockets; no-op on other platforms
     if (pipe(s->wakeup_pipe) < 0) {
-        catta_free(s);
-        winsock_exit();
-        return NULL;
+        catta_log_error(__FILE__": pipe() failed: %s", errnostrsocket());
+        goto fail;
     }
 
-    catta_set_nonblock(s->wakeup_pipe[0]);
-    catta_set_nonblock(s->wakeup_pipe[1]);
+    if (catta_set_nonblock(s->wakeup_pipe[0]) < 0 ||
+        catta_set_nonblock(s->wakeup_pipe[1]) < 0)
+    {
+        catta_log_error(__FILE__": O_NONBLOCK failed: %s", errnostrsocket());
+        goto fail;
+    }
 
     s->api.userdata = s;
 
@@ -358,6 +362,11 @@ CattaSimplePoll *catta_simple_poll_new(void) {
     CATTA_LLIST_HEAD_INIT(CattaTimeout, s->timeouts);
 
     return s;
+
+fail:
+    catta_free(s);
+    winsock_exit();
+    return NULL;
 }
 
 void catta_simple_poll_free(CattaSimplePoll *s) {