X-Git-Url: http://git.archive.openwrt.org/?p=project%2Flibubox.git;a=blobdiff_plain;f=uloop.c;h=4be5f45b17c9acf052e07afc4360ac6f595ee526;hp=ec37925a672a3d9a857f5274932f2ea74d595a44;hb=02074ab52170ffaab21196cb841bb1cfde4d45ba;hpb=869fc39f50473e135a6be72b13a10f987e46c57b diff --git a/uloop.c b/uloop.c index ec37925..4be5f45 100644 --- a/uloop.c +++ b/uloop.c @@ -48,7 +48,7 @@ struct uloop_timeout *first_timeout; static int poll_fd; -static bool cancel; +bool uloop_cancelled = false; #ifdef USE_KQUEUE @@ -94,7 +94,7 @@ static int register_poll(struct uloop_fd *fd, unsigned int flags) if (changed & ULOOP_WRITE) { uint16_t kflags = get_flags(flags, ULOOP_WRITE); - EV_SET(&ev[nev++], fd->fd, EVFILT_READ, kflags, 0, 0, fd); + EV_SET(&ev[nev++], fd->fd, EVFILT_WRITE, kflags, 0, 0, fd); } if (nev && (kevent(poll_fd, ev, nev, NULL, 0, &timeout) == -1)) @@ -236,7 +236,7 @@ int uloop_fd_add(struct uloop_fd *sock, unsigned int flags) unsigned int fl; int ret; - if (!sock->registered) { + if (!sock->registered && !(flags & ULOOP_BLOCKING)) { fl = fcntl(sock->fd, F_GETFL, 0); fl |= O_NONBLOCK; fcntl(sock->fd, F_SETFL, fl); @@ -327,7 +327,7 @@ int uloop_timeout_cancel(struct uloop_timeout *timeout) static void uloop_handle_sigint(int signo) { - cancel = true; + uloop_cancelled = true; } static void uloop_setup_signals(void) @@ -370,7 +370,7 @@ static void uloop_process_timeouts(struct timeval *tv) void uloop_end(void) { - cancel = true; + uloop_cancelled = true; } void uloop_run(void) @@ -378,7 +378,7 @@ void uloop_run(void) struct timeval tv; uloop_setup_signals(); - while(!cancel) + while(!uloop_cancelled) { gettimeofday(&tv, NULL); uloop_process_timeouts(&tv);