allow multiple calls to uloop_init() without annoying side effects
authorFelix Fietkau <nbd@openwrt.org>
Fri, 11 Feb 2011 00:25:17 +0000 (01:25 +0100)
committerFelix Fietkau <nbd@openwrt.org>
Fri, 11 Feb 2011 00:25:37 +0000 (01:25 +0100)
uloop.c

diff --git a/uloop.c b/uloop.c
index 568dcd6..8410634 100644 (file)
--- a/uloop.c
+++ b/uloop.c
 #define ULOOP_MAX_EVENTS 10
 
 static struct uloop_timeout *first_timeout;
-static int poll_fd;
+static int poll_fd = -1;
 bool uloop_cancelled = false;
 
 #ifdef USE_KQUEUE
 
 int uloop_init(void)
 {
+       if (poll_fd >= 0)
+               return 0;
+
        poll_fd = kqueue();
        if (poll_fd < 0)
                return -1;
@@ -160,6 +163,9 @@ static void uloop_run_events(int timeout)
 
 int uloop_init(void)
 {
+       if (poll_fd >= 0)
+               return 0;
+
        poll_fd = epoll_create(32);
        if (poll_fd < 0)
                return -1;
@@ -383,5 +389,9 @@ void uloop_run(void)
 
 void uloop_done(void)
 {
+       if (poll_fd < 0)
+               return;
+
        close(poll_fd);
+       poll_fd = -1;
 }