From 74715cb089d8afe816ab86cd06c6051d7f4c444b Mon Sep 17 00:00:00 2001 From: yuqing Date: Wed, 27 Jan 2016 22:50:35 +0800 Subject: [PATCH] iovent bug fixed for FreeBSD --- HISTORY | 3 ++- src/ioevent.c | 8 ++------ src/ioevent.h | 13 +++++++------ 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/HISTORY b/HISTORY index 5858244..a5aaae5 100644 --- a/HISTORY +++ b/HISTORY @@ -1,5 +1,5 @@ -Version 1.24 2016-01-26 +Version 1.24 2016-01-27 * php extension compiled on PHP 7 * add skiplist which support stable sort * make.sh: use sed to replace perl @@ -9,6 +9,7 @@ Version 1.24 2016-01-26 * add function get_processes for Linux * ini_file_reader add iniGetSectionNames and iniGetSectionItems * add fast_blocked_queue.[hc] + * iovent bug fixed for FreeBSD Version 1.23 2015-11-16 * sched_thread.c: task can execute in a new thread diff --git a/src/ioevent.c b/src/ioevent.c index aedfe89..8c9cb88 100644 --- a/src/ioevent.c +++ b/src/ioevent.c @@ -113,18 +113,14 @@ int ioevent_modify(IOEventPoller *ioevent, const int fd, const int e, struct kevent ev[2]; int n = 0; if (e & IOEVENT_READ) { - if (!(ioevent->care_events & IOEVENT_READ)) { - EV_SET(&ev[n++], fd, EVFILT_READ, EV_ADD | ioevent->extra_events, 0, 0, data); - } + EV_SET(&ev[n++], fd, EVFILT_READ, EV_ADD | ioevent->extra_events, 0, 0, data); } else if ((ioevent->care_events & IOEVENT_READ)) { EV_SET(&ev[n++], fd, EVFILT_READ, EV_DELETE, 0, 0, NULL); } if (e & IOEVENT_WRITE) { - if (!(ioevent->care_events & IOEVENT_WRITE)) { - EV_SET(&ev[n++], fd, EVFILT_WRITE, EV_ADD | ioevent->extra_events, 0, 0, data); - } + EV_SET(&ev[n++], fd, EVFILT_WRITE, EV_ADD | ioevent->extra_events, 0, 0, data); } else if ((ioevent->care_events & IOEVENT_WRITE)) { EV_SET(&ev[n++], fd, EVFILT_WRITE, EV_DELETE, 0, 0, NULL); diff --git a/src/ioevent.h b/src/ioevent.h index 543a584..797f037 100644 --- a/src/ioevent.h +++ b/src/ioevent.h @@ -18,16 +18,17 @@ #elif IOEVENT_USE_KQUEUE #include +#include #define IOEVENT_EDGE_TRIGGER EV_CLEAR -#define KPOLLIN 0x001 -#define KPOLLPRI 0x002 -#define KPOLLOUT 0x004 -#define KPOLLERR 0x010 -#define KPOLLHUP 0x020 +#define KPOLLIN POLLIN +#define KPOLLPRI POLLPRI +#define KPOLLOUT POLLOUT +#define KPOLLERR POLLERR +#define KPOLLHUP POLLHUP #define IOEVENT_READ KPOLLIN #define IOEVENT_WRITE KPOLLOUT -#define IOEVENT_ERROR (KPOLLERR | KPOLLPRI | KPOLLHUP) +#define IOEVENT_ERROR (KPOLLERR | KPOLLHUP | POLLNVAL) #ifdef __cplusplus extern "C" {