Lines Matching full:ev
203 static void handle_signal(struct event* ev) in handle_signal() argument
206 log_assert(ev->is_signal && ev->hEvent); in handle_signal()
208 ret = WSAWaitForMultipleEvents(1, &ev->hEvent, 0 /* any object */, in handle_signal()
221 if(!WSAResetEvent(ev->hEvent)) in handle_signal()
225 fptr_ok(fptr_whitelist_event(ev->ev_callback)); in handle_signal()
226 (*ev->ev_callback)(ev->ev_fd, ev->ev_events, ev->ev_arg); in handle_signal()
469 void event_set(struct event *ev, int fd, short bits, in event_set() argument
472 ev->node.key = ev; in event_set()
473 ev->ev_fd = fd; in event_set()
474 ev->ev_events = bits; in event_set()
475 ev->ev_callback = cb; in event_set()
476 fptr_ok(fptr_whitelist_event(ev->ev_callback)); in event_set()
477 ev->ev_arg = arg; in event_set()
478 ev->just_checked = 0; in event_set()
479 ev->added = 0; in event_set()
482 int event_base_set(struct event_base *base, struct event *ev) in event_base_set() argument
484 ev->ev_base = base; in event_base_set()
485 ev->old_events = 0; in event_base_set()
486 ev->stick_events = 0; in event_base_set()
487 ev->added = 0; in event_base_set()
491 int event_add(struct event *ev, struct timeval *tv) in event_add() argument
494 ev, ev->added, ev->ev_fd, in event_add()
496 (ev->ev_events&EV_READ)?" EV_READ":"", in event_add()
497 (ev->ev_events&EV_WRITE)?" EV_WRITE":"", in event_add()
498 (ev->ev_events&EV_TIMEOUT)?" EV_TIMEOUT":""); in event_add()
499 if(ev->added) in event_add()
500 event_del(ev); in event_add()
501 log_assert(ev->ev_fd==-1 || find_fd(ev->ev_base, ev->ev_fd) == -1); in event_add()
502 ev->is_tcp = 0; in event_add()
503 ev->is_signal = 0; in event_add()
504 ev->just_checked = 0; in event_add()
506 if((ev->ev_events&(EV_READ|EV_WRITE)) && ev->ev_fd != -1) { in event_add()
511 if(ev->ev_base->max == ev->ev_base->cap) in event_add()
513 ev->idx = ev->ev_base->max++; in event_add()
514 ev->ev_base->items[ev->idx] = ev; in event_add()
516 if( (ev->ev_events&EV_READ) ) in event_add()
518 if( (ev->ev_events&EV_WRITE) ) in event_add()
521 if(getsockopt(ev->ev_fd, SOL_SOCKET, SO_TYPE, in event_add()
527 ev->is_tcp = 1; in event_add()
529 if( (ev->ev_events&EV_WRITE) ) in event_add()
532 if(getsockopt(ev->ev_fd, SOL_SOCKET, SO_ACCEPTCONN, in event_add()
539 ev->hEvent = WSACreateEvent(); in event_add()
540 if(ev->hEvent == WSA_INVALID_EVENT) in event_add()
545 if(WSAEventSelect(ev->ev_fd, ev->hEvent, events) != 0) { in event_add()
549 if(ev->is_tcp && ev->stick_events && in event_add()
550 (ev->ev_events & ev->old_events)) { in event_add()
552 ev->ev_base->tcp_reinvigorated = 1; in event_add()
556 if(tv && (ev->ev_events&EV_TIMEOUT)) { in event_add()
558 struct timeval *now = ev->ev_base->time_tv; in event_add()
559 ev->ev_timeout.tv_sec = tv->tv_sec + now->tv_sec; in event_add()
560 ev->ev_timeout.tv_usec = tv->tv_usec + now->tv_usec; in event_add()
561 while(ev->ev_timeout.tv_usec >= 1000000) { in event_add()
562 ev->ev_timeout.tv_usec -= 1000000; in event_add()
563 ev->ev_timeout.tv_sec++; in event_add()
566 (void)rbtree_insert(ev->ev_base->times, &ev->node); in event_add()
568 ev->added = 1; in event_add()
572 int event_del(struct event *ev) in event_del() argument
575 ev, ev->added, ev->ev_fd, in event_del()
576 (ev->ev_events&EV_TIMEOUT)?(long long)ev->ev_timeout.tv_sec*1000+ in event_del()
577 (long long)ev->ev_timeout.tv_usec/1000:-1, in event_del()
578 (ev->ev_events&EV_READ)?" EV_READ":"", in event_del()
579 (ev->ev_events&EV_WRITE)?" EV_WRITE":"", in event_del()
580 (ev->ev_events&EV_TIMEOUT)?" EV_TIMEOUT":""); in event_del()
581 if(!ev->added) in event_del()
583 log_assert(ev->added); in event_del()
584 if((ev->ev_events&EV_TIMEOUT)) in event_del()
585 (void)rbtree_delete(ev->ev_base->times, &ev->node); in event_del()
586 if((ev->ev_events&(EV_READ|EV_WRITE)) && ev->ev_fd != -1) { in event_del()
587 log_assert(ev->ev_base->max > 0); in event_del()
589 ev->ev_base->items[ev->idx] = in event_del()
590 ev->ev_base->items[ev->ev_base->max-1]; in event_del()
591 ev->ev_base->items[ev->ev_base->max-1] = NULL; in event_del()
592 ev->ev_base->max--; in event_del()
593 if(ev->idx < ev->ev_base->max) in event_del()
594 ev->ev_base->items[ev->idx]->idx = ev->idx; in event_del()
595 zero_waitfor(ev->ev_base->waitfor, ev->hEvent); in event_del()
597 if(WSAEventSelect(ev->ev_fd, ev->hEvent, 0) != 0) in event_del()
600 if(!WSACloseEvent(ev->hEvent)) in event_del()
604 ev->just_checked = 0; in event_del()
605 ev->added = 0; in event_del()
614 struct event* ev; in sigh() local
617 ev = signal_base->signals[sig]; in sigh()
618 if(!ev) in sigh()
620 fptr_ok(fptr_whitelist_event(ev->ev_callback)); in sigh()
621 (*ev->ev_callback)(sig, EV_SIGNAL, ev->ev_arg); in sigh()
624 int signal_add(struct event *ev, struct timeval * ATTR_UNUSED(tv)) in signal_add() argument
626 if(ev->ev_fd == -1 || ev->ev_fd >= MAX_SIG) in signal_add()
628 signal_base = ev->ev_base; in signal_add()
629 ev->ev_base->signals[ev->ev_fd] = ev; in signal_add()
630 ev->added = 1; in signal_add()
631 if(signal(ev->ev_fd, sigh) == SIG_ERR) { in signal_add()
637 int signal_del(struct event *ev) in signal_del() argument
639 if(ev->ev_fd == -1 || ev->ev_fd >= MAX_SIG) in signal_del()
641 ev->ev_base->signals[ev->ev_fd] = NULL; in signal_del()
642 ev->added = 0; in signal_del()
646 void winsock_tcp_wouldblock(struct event* ev, int eventbits) in winsock_tcp_wouldblock() argument
650 ev->old_events &= (~eventbits); in winsock_tcp_wouldblock()
651 if(ev->old_events == 0) in winsock_tcp_wouldblock()
652 ev->stick_events = 0; in winsock_tcp_wouldblock()
659 int winsock_register_wsaevent(struct event_base* base, struct event* ev, in winsock_register_wsaevent() argument
664 memset(ev, 0, sizeof(*ev)); in winsock_register_wsaevent()
665 ev->ev_fd = -1; in winsock_register_wsaevent()
666 ev->ev_events = EV_READ; in winsock_register_wsaevent()
667 ev->ev_callback = cb; in winsock_register_wsaevent()
668 ev->ev_arg = arg; in winsock_register_wsaevent()
669 ev->is_signal = 1; in winsock_register_wsaevent()
670 ev->hEvent = wsaevent; in winsock_register_wsaevent()
671 ev->added = 1; in winsock_register_wsaevent()
672 ev->ev_base = base; in winsock_register_wsaevent()
673 ev->idx = ev->ev_base->max++; in winsock_register_wsaevent()
674 ev->ev_base->items[ev->idx] = ev; in winsock_register_wsaevent()
678 void winsock_unregister_wsaevent(struct event* ev) in winsock_unregister_wsaevent() argument
680 if(!ev || !ev->added) return; in winsock_unregister_wsaevent()
681 log_assert(ev->added && ev->ev_base->max > 0) in winsock_unregister_wsaevent()
683 ev->ev_base->items[ev->idx] = ev->ev_base->items[ev->ev_base->max-1]; in winsock_unregister_wsaevent()
684 ev->ev_base->items[ev->ev_base->max-1] = NULL; in winsock_unregister_wsaevent()
685 ev->ev_base->max--; in winsock_unregister_wsaevent()
686 if(ev->idx < ev->ev_base->max) in winsock_unregister_wsaevent()
687 ev->ev_base->items[ev->idx]->idx = ev->idx; in winsock_unregister_wsaevent()
688 ev->added = 0; in winsock_unregister_wsaevent()