diff options
| author | Felix Fietkau | 2011-02-11 00:25:17 +0000 |
|---|---|---|
| committer | Felix Fietkau | 2011-02-11 00:25:37 +0000 |
| commit | 7ec33884a3b852c139d0afb4d94bfff79804b115 (patch) | |
| tree | c399ac39084d0f47f2a83aa18a033603e320dc50 | |
| parent | 1ef7c81dfcb2452bc41cba28c6016a1dd6fa1dce (diff) | |
| download | libubox-7ec33884a3b852c139d0afb4d94bfff79804b115.tar.gz | |
allow multiple calls to uloop_init() without annoying side effects
| -rw-r--r-- | uloop.c | 12 |
1 files changed, 11 insertions, 1 deletions
@@ -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; } |