From 7ec33884a3b852c139d0afb4d94bfff79804b115 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Fri, 11 Feb 2011 01:25:17 +0100 Subject: [PATCH] allow multiple calls to uloop_init() without annoying side effects --- uloop.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) 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; }