summaryrefslogtreecommitdiff
path: root/scheduler/select.c
diff options
context:
space:
mode:
authormsweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be>2009-12-09 18:36:59 +0000
committermsweet <msweet@a1ca3aef-8c08-0410-bb20-df032aa958be>2009-12-09 18:36:59 +0000
commitef55b7453303a9a2b20590815c967d044a13da1d (patch)
tree948eaac8dcc2bfdff77ca367ea8ff058cda8c109 /scheduler/select.c
parent3fb9c47ea669977c856ad82b3ea593ec76d136ec (diff)
downloadcups-ef55b7453303a9a2b20590815c967d044a13da1d.tar.gz
Merge changes from CUPS 1.5svn-r8916.
git-svn-id: svn+ssh://src.apple.com/svn/cups/easysw/current@1766 a1ca3aef-8c08-0410-bb20-df032aa958be
Diffstat (limited to 'scheduler/select.c')
-rw-r--r--scheduler/select.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/scheduler/select.c b/scheduler/select.c
index 8896388cc..96f12ab3a 100644
--- a/scheduler/select.c
+++ b/scheduler/select.c
@@ -241,11 +241,11 @@ static fd_set cupsd_global_input,
static int compare_fds(_cupsd_fd_t *a, _cupsd_fd_t *b);
static _cupsd_fd_t *find_fd(int fd);
-#define release_fd(f) { \
+#define release_fd(f) { \
(f)->use --; \
if (!(f)->use) free((f));\
}
-#define retain_fd(f) (f)->use++
+#define retain_fd(f) (f)->use++
/*
@@ -454,7 +454,7 @@ cupsdDoSelect(long timeout) /* I - Timeout in seconds */
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 @@ cupsdDoSelect(long timeout) /* I - Timeout in seconds */
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 @@ cupsdDoSelect(long timeout) /* I - Timeout in seconds */
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 @@ cupsdDoSelect(long timeout) /* I - Timeout in seconds */
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);