projects
/
project
/
libubox.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
jshn: fix invalid variable reuse
[project/libubox.git]
/
uloop.c
diff --git
a/uloop.c
b/uloop.c
index
568dcd6
..
f60eb41
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;
@@
-118,7
+121,7
@@
static void uloop_run_events(int timeout)
if (timeout > 0) {
ts.tv_sec = timeout / 1000;
if (timeout > 0) {
ts.tv_sec = timeout / 1000;
- ts.tv_nsec =
timeout
* 1000000;
+ ts.tv_nsec =
(timeout % 1000)
* 1000000;
}
nfds = kevent(poll_fd, NULL, 0, events, ARRAY_SIZE(events), timeout > 0 ? &ts : NULL);
}
nfds = kevent(poll_fd, NULL, 0, events, ARRAY_SIZE(events), timeout > 0 ? &ts : NULL);
@@
-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;
@@
-377,11
+383,17
@@
void uloop_run(void)
{
gettimeofday(&tv, NULL);
uloop_process_timeouts(&tv);
{
gettimeofday(&tv, NULL);
uloop_process_timeouts(&tv);
+ if (uloop_cancelled)
+ break;
uloop_run_events(uloop_get_next_timeout(&tv));
}
}
void uloop_done(void)
{
uloop_run_events(uloop_get_next_timeout(&tv));
}
}
void uloop_done(void)
{
+ if (poll_fd < 0)
+ return;
+
close(poll_fd);
close(poll_fd);
+ poll_fd = -1;
}
}