summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Fietkau2011-02-11 00:25:17 +0000
committerFelix Fietkau2011-02-11 00:25:37 +0000
commit7ec33884a3b852c139d0afb4d94bfff79804b115 (patch)
treec399ac39084d0f47f2a83aa18a033603e320dc50
parent1ef7c81dfcb2452bc41cba28c6016a1dd6fa1dce (diff)
downloadlibubox-7ec33884a3b852c139d0afb4d94bfff79804b115.tar.gz
allow multiple calls to uloop_init() without annoying side effects
-rw-r--r--uloop.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/uloop.c b/uloop.c
index 568dcd6..8410634 100644
--- a/uloop.c
+++ b/uloop.c
@@ -47,13 +47,16 @@
#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;
}