From c049d85f96e0774fd8a3e93876be9c4114ed651b Mon Sep 17 00:00:00 2001 From: yuqing Date: Mon, 14 Sep 2015 09:18:34 +0800 Subject: [PATCH] check n for BSD event set --- src/ioevent.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/ioevent.c b/src/ioevent.c index d432a2e..aedfe89 100644 --- a/src/ioevent.c +++ b/src/ioevent.c @@ -129,8 +129,14 @@ int ioevent_modify(IOEventPoller *ioevent, const int fd, const int e, else if ((ioevent->care_events & IOEVENT_WRITE)) { EV_SET(&ev[n++], fd, EVFILT_WRITE, EV_DELETE, 0, 0, NULL); } + ioevent->care_events = e; - return kevent(ioevent->poll_fd, ev, n, NULL, 0, NULL); + if (n > 0) { + return kevent(ioevent->poll_fd, ev, n, NULL, 0, NULL); + } + else { + return 0; + } #elif IOEVENT_USE_PORT return port_associate(ioevent->poll_fd, PORT_SOURCE_FD, fd, e, data); #endif @@ -149,8 +155,14 @@ int ioevent_detach(IOEventPoller *ioevent, const int fd) if ((ioevent->care_events & IOEVENT_WRITE)) { EV_SET(&ev[n++], fd, EVFILT_WRITE, EV_DELETE, 0, 0, NULL); } + ioevent->care_events = 0; - return kevent(ioevent->poll_fd, ev, n, NULL, 0, NULL); + if (n > 0) { + return kevent(ioevent->poll_fd, ev, n, NULL, 0, NULL); + } + else { + return 0; + } #elif IOEVENT_USE_PORT return port_dissociate(ioevent->poll_fd, PORT_SOURCE_FD, fd); #endif