diff --git a/librb/src/commio.c b/librb/src/commio.c index bd401b18..6b13518e 100644 --- a/librb/src/commio.c +++ b/librb/src/commio.c @@ -110,6 +110,16 @@ free_fds(void) RB_DLINK_FOREACH_SAFE(ptr, next, closed_list.head) { F = ptr->data; + + number_fd--; + +#ifdef _WIN32 + if(F->type & (RB_FD_SOCKET | RB_FD_PIPE)) + closesocket(F->fd); + else +#endif + close(F->fd); + rb_dlinkDelete(ptr, &closed_list); rb_bh_free(fd_heap, F); } @@ -885,18 +895,6 @@ rb_close(rb_fde_t *F) remove_fd(F); ClearFDOpen(F); } - - number_fd--; - -#ifdef _WIN32 - if(type & (RB_FD_SOCKET | RB_FD_PIPE)) - { - closesocket(fd); - return; - } - else -#endif - close(fd); } diff --git a/librb/src/epoll.c b/librb/src/epoll.c index 7b5785c8..9af4bc67 100644 --- a/librb/src/epoll.c +++ b/librb/src/epoll.c @@ -188,9 +188,6 @@ rb_select_epoll(long delay) PF *hdl; rb_fde_t *F = ep_info->pfd[i].data.ptr; old_flags = F->pflags; - - if(!IsFDOpen(F)) - continue; if(ep_info->pfd[i].events & (EPOLLIN | EPOLLHUP | EPOLLERR)) { hdl = F->read_handler;