Lines Matching refs:pollset

197 static apr_status_t impl_pollset_create(apr_pollset_t *pollset,
203 pollset->p = NULL;
208 pollset->p = NULL;
212 pollset->p = apr_palloc(p, sizeof(apr_pollset_private_t));
213 FD_ZERO(&(pollset->p->readset));
214 FD_ZERO(&(pollset->p->writeset));
215 FD_ZERO(&(pollset->p->exceptset));
216 pollset->p->maxfd = 0;
218 pollset->p->set_type = APR_NO_DESC;
220 pollset->p->query_set = apr_palloc(p, size * sizeof(apr_pollfd_t));
221 pollset->p->result_set = apr_palloc(p, size * sizeof(apr_pollfd_t));
226 static apr_status_t impl_pollset_add(apr_pollset_t *pollset,
231 if (pollset->nelts == pollset->nalloc) {
235 pollset->p->query_set[pollset->nelts] = *descriptor;
240 if (HAS_PIPES(pollset->p->set_type)) {
244 pollset->p->set_type = APR_POLL_SOCKET;
251 if ((pollset->flags & APR_POLLSET_WAKEABLE) &&
252 descriptor->desc.f == pollset->wakeup_pipe[0])
259 if (descriptor->desc.f->is_pipe && !HAS_SOCKETS(pollset->p->set_type)) {
260 pollset->p->set_type = APR_POLL_FILE;
278 FD_SET(fd, &(pollset->p->readset));
281 FD_SET(fd, &(pollset->p->writeset));
285 FD_SET(fd, &(pollset->p->exceptset));
287 if ((int) fd > pollset->p->maxfd) {
288 pollset->p->maxfd = (int) fd;
290 pollset->nelts++;
294 static apr_status_t impl_pollset_remove(apr_pollset_t * pollset,
311 for (i = 0; i < pollset->nelts; i++) {
312 if (descriptor->desc.s == pollset->p->query_set[i].desc.s) {
315 apr_uint32_t old_nelts = pollset->nelts;
316 pollset->nelts--;
318 if (descriptor->desc.s == pollset->p->query_set[i].desc.s) {
319 pollset->nelts--;
322 pollset->p->query_set[dst] = pollset->p->query_set[i];
326 FD_CLR(fd, &(pollset->p->readset));
327 FD_CLR(fd, &(pollset->p->writeset));
328 FD_CLR(fd, &(pollset->p->exceptset));
329 if (((int) fd == pollset->p->maxfd) && (pollset->p->maxfd > 0)) {
330 pollset->p->maxfd--;
339 static apr_status_t impl_pollset_poll(apr_pollset_t *pollset,
355 if (pollset->nelts == 0) {
374 memcpy(&readset, &(pollset->p->readset), sizeof(fd_set));
375 memcpy(&writeset, &(pollset->p->writeset), sizeof(fd_set));
376 memcpy(&exceptset, &(pollset->p->exceptset), sizeof(fd_set));
379 if (HAS_PIPES(pollset->p->set_type)) {
380 rs = pipe_select(pollset->p->maxfd + 1, &readset, &writeset, &exceptset,
385 rs = select(pollset->p->maxfd + 1, &readset, &writeset, &exceptset,
396 for (i = 0; i < pollset->nelts; i++) {
398 if (pollset->p->query_set[i].desc_type == APR_POLL_SOCKET) {
399 fd = pollset->p->query_set[i].desc.s->socketdes;
402 if ((pollset->flags & APR_POLLSET_WAKEABLE) &&
403 pollset->p->query_set[i].desc.f == pollset->wakeup_pipe[0]) {
404 apr_pollset_drain_wakeup_pipe(pollset);
412 fd = pollset->p->query_set[i].desc.f->filedes;
418 pollset->p->result_set[j] = pollset->p->query_set[i];
419 pollset->p->result_set[j].rtnevents = 0;
421 pollset->p->result_set[j].rtnevents |= APR_POLLIN;
424 pollset->p->result_set[j].rtnevents |= APR_POLLOUT;
427 pollset->p->result_set[j].rtnevents |= APR_POLLERR;
436 *descriptors = pollset->p->result_set;