Lines Matching refs:wait

36 #include "linux/wait.h"
103 /* The only case that an error should occur here is if the wait were
114 static void set_add_poll_wait_flag(poll_wait_head wait, bool add_queue_flag)
116 wait->add_queue_flag = add_queue_flag;
119 static int destroy_poll_wait(poll_wait_head wait)
126 for (i = 0; i < wait->inline_index; ++i)
128 wait_node = &wait->inline_items[i];
134 while (wait->table)
136 curr_table = wait->table;
137 wait->table = curr_table->next;
149 if (sem_destroy(&wait->sem) < 0)
158 static poll_wait_node *get_poll_item(poll_wait_head wait)
160 if (wait->inline_index < N_POLL_ITEMS)
162 return wait->inline_items + wait->inline_index++;
164 if (!wait->table || (wait->table && wait->table->index >= N_POLL_ITEMS))
175 new_entry_table->next = wait->table;
176 wait->table = new_entry_table;
179 return wait->table->items + wait->table->index++;
185 poll_wait_head wait = p->wait;
186 poll_wait_node *new_node = get_poll_item(wait);
189 new_node->entry = wait;
198 static int wait_sem_time(poll_wait_head wait, const struct timespec *time_ptr)
202 return sem_timedwait(&wait->sem, time_ptr);
206 return poll_semtake(&wait->sem);
210 static int file_poll(struct file *filep, poll_table *wait)
216 ret = filep->ops->poll(filep, wait);
222 static int fdesc_poll(int fd, poll_table *wait)
248 return file_poll(filep, wait);
251 static int query_fd(int fd, poll_table *wait)
262 return socks_poll(fd, wait);
271 return fdesc_poll(fd, wait);
274 static int query_fds(struct pollfd *fds, nfds_t nfds, poll_table *wait)
280 if ((nfds != 0 && fds == NULL) || wait == NULL || wait->wait == NULL)
295 wait->key = p_fds->events | POLLERR | POLLHUP;
297 ret = query_fd(p_fds->fd, wait);
308 set_add_poll_wait_flag(wait->wait, false);
354 if (!wait_address || !p || !p->wait)
359 if (p->wait->add_queue_flag)
407 wait_table.wait = &wait_entry;
408 wait_table.wait->table = NULL;
409 wait_table.wait->inline_index = 0;
410 if (sem_init(&wait_table.wait->sem, 0, 0) < 0)
416 /* set wait flag */
418 set_add_poll_wait_flag(wait_table.wait, ((timeout == 0) ? false : true));
431 /* clear wait flag if no fd got on first query */
433 set_add_poll_wait_flag(wait_table.wait, false);
445 ret = wait_sem_time(wait_table.wait, (const struct timespec *)NULL);
473 ret = wait_sem_time(wait_table.wait, &wait_time);
502 if (destroy_poll_wait(wait_table.wait) < 0)