mirror of
https://github.com/NLnetLabs/unbound.git
synced 2025-12-20 14:53:15 -05:00
Fix unix version of windows bug found yesterday.
git-svn-id: file:///svn/unbound/trunk@1603 be551aaa-1e26-0410-a405-d3ace91eadb9
This commit is contained in:
parent
9ea5b16bae
commit
f3d98d17f4
3 changed files with 12 additions and 3 deletions
|
|
@ -1,3 +1,7 @@
|
|||
17 April 2009: Wouter
|
||||
- Fix reentrant in minievent handler for unix. Could have resulted
|
||||
in spurious event callbacks.
|
||||
|
||||
16 April 2009: Wouter
|
||||
- winsock event handler exit very quickly on signal, even if
|
||||
under heavy load.
|
||||
|
|
|
|||
|
|
@ -182,6 +182,7 @@ static int handle_select(struct event_base* base, struct timeval* wait)
|
|||
#endif
|
||||
memmove(&r, &base->reads, sizeof(fd_set));
|
||||
memmove(&w, &base->writes, sizeof(fd_set));
|
||||
memmove(&base->ready, &base->content, sizeof(fd_set));
|
||||
|
||||
if((ret = select(base->maxfd+1, &r, &w, NULL, wait)) == -1) {
|
||||
ret = errno;
|
||||
|
|
@ -197,7 +198,7 @@ static int handle_select(struct event_base* base, struct timeval* wait)
|
|||
|
||||
for(i=0; i<base->maxfd+1; i++) {
|
||||
short bits = 0;
|
||||
if(!base->fds[i]) {
|
||||
if(!base->fds[i] || !(FD_ISSET(i, &base->ready))) {
|
||||
continue;
|
||||
}
|
||||
if(FD_ISSET(i, &r)) {
|
||||
|
|
@ -301,6 +302,8 @@ int event_add(struct event* ev, struct timeval* tv)
|
|||
if(ev->ev_events&EV_WRITE) {
|
||||
FD_SET(FD_SET_T ev->ev_fd, &ev->ev_base->writes);
|
||||
}
|
||||
FD_SET(FD_SET_T ev->ev_fd, &ev->ev_base->content);
|
||||
FD_CLR(FD_SET_T ev->ev_fd, &ev->ev_base->ready);
|
||||
if(ev->ev_fd > ev->ev_base->maxfd)
|
||||
ev->ev_base->maxfd = ev->ev_fd;
|
||||
}
|
||||
|
|
@ -331,6 +334,8 @@ int event_del(struct event* ev)
|
|||
ev->ev_base->fds[ev->ev_fd] = NULL;
|
||||
FD_CLR(FD_SET_T ev->ev_fd, &ev->ev_base->reads);
|
||||
FD_CLR(FD_SET_T ev->ev_fd, &ev->ev_base->writes);
|
||||
FD_CLR(FD_SET_T ev->ev_fd, &ev->ev_base->ready);
|
||||
FD_CLR(FD_SET_T ev->ev_fd, &ev->ev_base->content);
|
||||
}
|
||||
ev->added = 0;
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -88,8 +88,8 @@ struct event_base
|
|||
int maxfd;
|
||||
/** capacity - size of the fds array */
|
||||
int capfd;
|
||||
/** fdset for read write */
|
||||
fd_set reads, writes;
|
||||
/** fdset for read write, for fds ready, and added */
|
||||
fd_set reads, writes, ready, content;
|
||||
/** array of 0 - maxsig of ptr to event for it */
|
||||
struct event** signals;
|
||||
/** if we need to exit */
|
||||
|
|
|
|||
Loading…
Reference in a new issue