projects
/
project
/
libubox.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
1ef7c81
)
allow multiple calls to uloop_init() without annoying side effects
author
Felix Fietkau
<nbd@openwrt.org>
Fri, 11 Feb 2011 00:25:17 +0000
(
01:25
+0100)
committer
Felix Fietkau
<nbd@openwrt.org>
Fri, 11 Feb 2011 00:25:37 +0000
(
01:25
+0100)
uloop.c
patch
|
blob
|
history
diff --git
a/uloop.c
b/uloop.c
index
568dcd6
..
8410634
100644
(file)
--- a/
uloop.c
+++ b/
uloop.c
@@
-47,13
+47,16
@@
#define ULOOP_MAX_EVENTS 10
static struct uloop_timeout *first_timeout;
#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)
{
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;
poll_fd = kqueue();
if (poll_fd < 0)
return -1;
@@
-160,6
+163,9
@@
static void uloop_run_events(int timeout)
int uloop_init(void)
{
int uloop_init(void)
{
+ if (poll_fd >= 0)
+ return 0;
+
poll_fd = epoll_create(32);
if (poll_fd < 0)
return -1;
poll_fd = epoll_create(32);
if (poll_fd < 0)
return -1;
@@
-383,5
+389,9
@@
void uloop_run(void)
void uloop_done(void)
{
void uloop_done(void)
{
+ if (poll_fd < 0)
+ return;
+
close(poll_fd);
close(poll_fd);
+ poll_fd = -1;
}
}