• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src/router/samba-3.5.8/lib/tevent/

Lines Matching refs:std_ev

64 static void epoll_fallback_to_select(struct std_event_context *std_ev, const char *reason)
66 tevent_debug(std_ev->ev, TEVENT_DEBUG_FATAL,
69 close(std_ev->epoll_fd);
70 std_ev->epoll_fd = -1;
71 talloc_set_destructor(std_ev, NULL);
88 static int epoll_ctx_destructor(struct std_event_context *std_ev)
90 if (std_ev->epoll_fd != -1) {
91 close(std_ev->epoll_fd);
93 std_ev->epoll_fd = -1;
100 static void epoll_init_ctx(struct std_event_context *std_ev)
102 std_ev->epoll_fd = epoll_create(64);
103 std_ev->pid = getpid();
104 talloc_set_destructor(std_ev, epoll_ctx_destructor);
107 static void epoll_add_event(struct std_event_context *std_ev, struct tevent_fd *fde);
114 static void epoll_check_reopen(struct std_event_context *std_ev)
118 if (std_ev->pid == getpid()) {
122 close(std_ev->epoll_fd);
123 std_ev->epoll_fd = epoll_create(64);
124 if (std_ev->epoll_fd == -1) {
125 tevent_debug(std_ev->ev, TEVENT_DEBUG_FATAL,
129 std_ev->pid = getpid();
130 for (fde=std_ev->ev->fd_events;fde;fde=fde->next) {
131 epoll_add_event(std_ev, fde);
142 static void epoll_add_event(struct std_event_context *std_ev, struct tevent_fd *fde)
145 if (std_ev->epoll_fd == -1) return;
155 if (epoll_ctl(std_ev->epoll_fd, EPOLL_CTL_ADD, fde->fd, &event) != 0) {
156 epoll_fallback_to_select(std_ev, "EPOLL_CTL_ADD failed");
169 static void epoll_del_event(struct std_event_context *std_ev, struct tevent_fd *fde)
172 if (std_ev->epoll_fd == -1) return;
182 epoll_ctl(std_ev->epoll_fd, EPOLL_CTL_DEL, fde->fd, &event);
189 static void epoll_mod_event(struct std_event_context *std_ev, struct tevent_fd *fde)
192 if (std_ev->epoll_fd == -1) return;
199 if (epoll_ctl(std_ev->epoll_fd, EPOLL_CTL_MOD, fde->fd, &event) != 0) {
200 epoll_fallback_to_select(std_ev, "EPOLL_CTL_MOD failed");
209 static void epoll_change_event(struct std_event_context *std_ev, struct tevent_fd *fde)
215 if (std_ev->epoll_fd == -1) return;
222 epoll_mod_event(std_ev, fde);
231 epoll_del_event(std_ev, fde);
237 epoll_add_event(std_ev, fde);
245 static int epoll_event_loop(struct std_event_context *std_ev, struct timeval *tvalp)
252 if (std_ev->epoll_fd == -1) return -1;
259 if (std_ev->ev->signal_events &&
260 tevent_common_check_signal(std_ev->ev)) {
264 ret = epoll_wait(std_ev->epoll_fd, events, MAXEVENTS, timeout);
266 if (ret == -1 && errno == EINTR && std_ev->ev->signal_events) {
267 if (tevent_common_check_signal(std_ev->ev)) {
273 epoll_fallback_to_select(std_ev, "epoll_wait() failed");
279 tevent_common_loop_timer_delay(std_ev->ev);
289 epoll_fallback_to_select(std_ev, "epoll_wait() gave bad data");
301 epoll_del_event(std_ev, fde);
309 fde->handler(std_ev->ev, fde, flags, fde->private_data);
317 #define epoll_init_ctx(std_ev)
318 #define epoll_add_event(std_ev,fde)
319 #define epoll_del_event(std_ev,fde)
320 #define epoll_change_event(std_ev,fde)
321 #define epoll_event_loop(std_ev,tvalp) (-1)
322 #define epoll_check_reopen(std_ev)
330 struct std_event_context *std_ev;
332 std_ev = talloc_zero(ev, struct std_event_context);
333 if (!std_ev) return -1;
334 std_ev->ev = ev;
335 std_ev->epoll_fd = -1;
337 epoll_init_ctx(std_ev);
339 ev->additional_data = std_ev;
346 static void calc_maxfd(struct std_event_context *std_ev)
350 std_ev->maxfd = 0;
351 for (fde = std_ev->ev->fd_events; fde; fde = fde->next) {
352 if (fde->fd > std_ev->maxfd) {
353 std_ev->maxfd = fde->fd;
370 struct std_event_context *std_ev = NULL;
373 std_ev = talloc_get_type(ev->additional_data,
376 epoll_check_reopen(std_ev);
378 if (std_ev->maxfd == fde->fd) {
379 std_ev->maxfd = EVENT_INVALID_MAXFD;
382 epoll_del_event(std_ev, fde);
399 struct std_event_context *std_ev = talloc_get_type(ev->additional_data,
403 epoll_check_reopen(std_ev);
410 if ((std_ev->maxfd != EVENT_INVALID_MAXFD)
411 && (fde->fd > std_ev->maxfd)) {
412 std_ev->maxfd = fde->fd;
416 epoll_add_event(std_ev, fde);
427 struct std_event_context *std_ev;
432 std_ev = talloc_get_type(ev->additional_data, struct std_event_context);
436 epoll_check_reopen(std_ev);
438 epoll_change_event(std_ev, fde);
444 static int std_event_loop_select(struct std_event_context *std_ev, struct timeval *tvalp)
451 if (std_ev->maxfd == EVENT_INVALID_MAXFD) {
452 calc_maxfd(std_ev);
459 for (fde = std_ev->ev->fd_events; fde; fde = fde->next) {
461 std_ev->exit_code = EBADF;
473 if (std_ev->ev->signal_events &&
474 tevent_common_check_signal(std_ev->ev)) {
478 selrtn = select(std_ev->maxfd+1, &r_fds, &w_fds, NULL, tvalp);
481 std_ev->ev->signal_events) {
482 tevent_common_check_signal(std_ev->ev);
492 tevent_debug(std_ev->ev, TEVENT_DEBUG_FATAL,
494 std_ev->exit_code = EBADF;
500 tevent_common_loop_timer_delay(std_ev->ev);
508 for (fde = std_ev->ev->fd_events; fde; fde = fde->next) {
514 fde->handler(std_ev->ev, fde, flags, fde->private_data);
528 struct std_event_context *std_ev = talloc_get_type(ev->additional_data,
547 epoll_check_reopen(std_ev);
549 if (epoll_event_loop(std_ev, &tval) == 0) {
553 return std_event_loop_select(std_ev, &tval);