#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
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;
CATTA_LLIST_HEAD_INIT(CattaTimeout, s->timeouts);
return s;
+
+fail:
+ catta_free(s);
+ winsock_exit();
+ return NULL;
}
void catta_simple_poll_free(CattaSimplePoll *s) {