Index: scheduler/select.c =================================================================== --- scheduler/select.c (revision 8887) +++ scheduler/select.c (working copy) @@ -454,7 +454,7 @@ if (fdptr->read_cb && event->filter == EVFILT_READ) (*(fdptr->read_cb))(fdptr->data); - if (fdptr->write_cb && event->filter == EVFILT_WRITE) + if (fdptr->use > 1 && fdptr->write_cb && event->filter == EVFILT_WRITE) (*(fdptr->write_cb))(fdptr->data); release_fd(fdptr); @@ -499,7 +499,8 @@ if (fdptr->read_cb && (event->events & (EPOLLIN | EPOLLERR | EPOLLHUP))) (*(fdptr->read_cb))(fdptr->data); - if (fdptr->write_cb && (event->events & (EPOLLOUT | EPOLLERR | EPOLLHUP))) + if (fdptr->use > 1 && fdptr->write_cb && + (event->events & (EPOLLOUT | EPOLLERR | EPOLLHUP))) (*(fdptr->write_cb))(fdptr->data); release_fd(fdptr); @@ -590,7 +591,8 @@ if (fdptr->read_cb && (pfd->revents & (POLLIN | POLLERR | POLLHUP))) (*(fdptr->read_cb))(fdptr->data); - if (fdptr->write_cb && (pfd->revents & (POLLOUT | POLLERR | POLLHUP))) + if (fdptr->use > 1 && fdptr->write_cb && + (pfd->revents & (POLLOUT | POLLERR | POLLHUP))) (*(fdptr->write_cb))(fdptr->data); release_fd(fdptr); @@ -645,7 +647,8 @@ if (fdptr->read_cb && FD_ISSET(fdptr->fd, &cupsd_current_input)) (*(fdptr->read_cb))(fdptr->data); - if (fdptr->write_cb && FD_ISSET(fdptr->fd, &cupsd_current_output)) + if (fdptr->use > 1 && fdptr->write_cb && + FD_ISSET(fdptr->fd, &cupsd_current_output)) (*(fdptr->write_cb))(fdptr->data); release_fd(fdptr);