Lines Matching refs:base
135 gettime(struct event_base *base, struct timeval *tp) in gettime() argument
137 if (base->tv_cache.tv_sec) { in gettime()
138 *tp = base->tv_cache; in gettime()
161 struct event_base *base = event_base_new(); in event_init() local
163 if (base != NULL) in event_init()
164 current_base = base; in event_init()
166 return (base); in event_init()
173 struct event_base *base; in event_base_new() local
175 if ((base = calloc(1, sizeof(struct event_base))) == NULL) in event_base_new()
179 gettime(base, &base->event_tv); in event_base_new()
181 min_heap_ctor(&base->timeheap); in event_base_new()
182 TAILQ_INIT(&base->eventqueue); in event_base_new()
183 base->sig.ev_signal_pair[0] = -1; in event_base_new()
184 base->sig.ev_signal_pair[1] = -1; in event_base_new()
186 base->evbase = NULL; in event_base_new()
187 for (i = 0; eventops[i] && !base->evbase; i++) { in event_base_new()
188 base->evsel = eventops[i]; in event_base_new()
190 base->evbase = base->evsel->init(base); in event_base_new()
193 if (base->evbase == NULL) in event_base_new()
198 base->evsel->name); in event_base_new()
201 event_base_priority_init(base, 1); in event_base_new()
203 return (base); in event_base_new()
207 event_base_free(struct event_base *base) in event_base_free() argument
212 if (base == NULL && current_base) in event_base_free()
213 base = current_base; in event_base_free()
214 if (base == current_base) in event_base_free()
218 assert(base); in event_base_free()
220 for (ev = TAILQ_FIRST(&base->eventqueue); ev; ) { in event_base_free()
228 while ((ev = min_heap_top(&base->timeheap)) != NULL) { in event_base_free()
233 for (i = 0; i < base->nactivequeues; ++i) { in event_base_free()
234 for (ev = TAILQ_FIRST(base->activequeues[i]); ev; ) { in event_base_free()
248 if (base->evsel->dealloc != NULL) in event_base_free()
249 base->evsel->dealloc(base, base->evbase); in event_base_free()
251 for (i = 0; i < base->nactivequeues; ++i) in event_base_free()
252 assert(TAILQ_EMPTY(base->activequeues[i])); in event_base_free()
254 assert(min_heap_empty(&base->timeheap)); in event_base_free()
255 min_heap_dtor(&base->timeheap); in event_base_free()
257 for (i = 0; i < base->nactivequeues; ++i) in event_base_free()
258 free(base->activequeues[i]); in event_base_free()
259 free(base->activequeues); in event_base_free()
261 assert(TAILQ_EMPTY(&base->eventqueue)); in event_base_free()
263 free(base); in event_base_free()
268 event_reinit(struct event_base *base) in event_reinit() argument
270 const struct eventop *evsel = base->evsel; in event_reinit()
271 void *evbase = base->evbase; in event_reinit()
280 if (base->sig.ev_signal_added) { in event_reinit()
283 event_queue_remove(base, &base->sig.ev_signal, in event_reinit()
285 if (base->sig.ev_signal.ev_flags & EVLIST_ACTIVE) in event_reinit()
286 event_queue_remove(base, &base->sig.ev_signal, in event_reinit()
288 base->sig.ev_signal_added = 0; in event_reinit()
291 if (base->evsel->dealloc != NULL) in event_reinit()
292 base->evsel->dealloc(base, base->evbase); in event_reinit()
293 evbase = base->evbase = evsel->init(base); in event_reinit()
294 if (base->evbase == NULL) in event_reinit()
298 TAILQ_FOREACH(ev, &base->eventqueue, ev_next) { in event_reinit()
313 event_base_priority_init(struct event_base *base, int npriorities) in event_base_priority_init() argument
317 if (base->event_count_active) in event_base_priority_init()
320 if (base->nactivequeues && npriorities != base->nactivequeues) { in event_base_priority_init()
321 for (i = 0; i < base->nactivequeues; ++i) { in event_base_priority_init()
322 free(base->activequeues[i]); in event_base_priority_init()
324 free(base->activequeues); in event_base_priority_init()
328 base->nactivequeues = npriorities; in event_base_priority_init()
329 base->activequeues = (struct event_list **) in event_base_priority_init()
330 calloc(base->nactivequeues, sizeof(struct event_list *)); in event_base_priority_init()
331 if (base->activequeues == NULL) in event_base_priority_init()
334 for (i = 0; i < base->nactivequeues; ++i) { in event_base_priority_init()
335 base->activequeues[i] = malloc(sizeof(struct event_list)); in event_base_priority_init()
336 if (base->activequeues[i] == NULL) in event_base_priority_init()
338 TAILQ_INIT(base->activequeues[i]); in event_base_priority_init()
345 event_haveevents(struct event_base *base) in event_haveevents() argument
347 return (base->event_count > 0); in event_haveevents()
357 event_process_active(struct event_base *base) in event_process_active() argument
364 for (i = 0; i < base->nactivequeues; ++i) { in event_process_active()
365 if (TAILQ_FIRST(base->activequeues[i]) != NULL) { in event_process_active()
366 activeq = base->activequeues[i]; in event_process_active()
375 event_queue_remove(base, ev, EVLIST_ACTIVE); in event_process_active()
386 if (base->event_break) in event_process_active()
409 event_base_get_method(struct event_base *base) in event_base_get_method() argument
411 assert(base); in event_base_get_method()
412 return (base->evsel->name); in event_base_get_method()
418 struct event_base *base = arg; in event_loopexit_cb() local
419 base->event_gotterm = 1; in event_loopexit_cb()
465 event_base_loop(struct event_base *base, int flags) in event_base_loop() argument
467 const struct eventop *evsel = base->evsel; in event_base_loop()
468 void *evbase = base->evbase; in event_base_loop()
474 base->tv_cache.tv_sec = 0; in event_base_loop()
476 if (base->sig.ev_signal_added) in event_base_loop()
477 evsignal_base = base; in event_base_loop()
481 if (base->event_gotterm) { in event_base_loop()
482 base->event_gotterm = 0; in event_base_loop()
486 if (base->event_break) { in event_base_loop()
487 base->event_break = 0; in event_base_loop()
491 timeout_correct(base, &tv); in event_base_loop()
494 if (!base->event_count_active && !(flags & EVLOOP_NONBLOCK)) { in event_base_loop()
495 timeout_next(base, &tv_p); in event_base_loop()
505 if (!event_haveevents(base)) { in event_base_loop()
511 gettime(base, &base->event_tv); in event_base_loop()
514 base->tv_cache.tv_sec = 0; in event_base_loop()
516 res = evsel->dispatch(base, evbase, tv_p); in event_base_loop()
520 gettime(base, &base->tv_cache); in event_base_loop()
522 timeout_process(base); in event_base_loop()
524 if (base->event_count_active) { in event_base_loop()
525 event_process_active(base); in event_base_loop()
526 if (!base->event_count_active && (flags & EVLOOP_ONCE)) in event_base_loop()
533 base->tv_cache.tv_sec = 0; in event_base_loop()
569 event_base_once(struct event_base *base, int fd, short events, in event_base_once() argument
603 res = event_base_set(base, &eonce->ev); in event_base_once()
638 event_base_set(struct event_base *base, struct event *ev) in event_base_set() argument
644 ev->ev_base = base; in event_base_set()
645 ev->ev_pri = base->nactivequeues/2; in event_base_set()
702 struct event_base *base = ev->ev_base; in event_add() local
703 const struct eventop *evsel = base->evsel; in event_add()
704 void *evbase = base->evbase; in event_add()
722 if (min_heap_reserve(&base->timeheap, in event_add()
723 1 + min_heap_size(&base->timeheap)) == -1) in event_add()
731 event_queue_insert(base, ev, EVLIST_INSERTED); in event_add()
746 event_queue_remove(base, ev, EVLIST_TIMEOUT); in event_add()
761 event_queue_remove(base, ev, EVLIST_ACTIVE); in event_add()
764 gettime(base, &now); in event_add()
771 event_queue_insert(base, ev, EVLIST_TIMEOUT); in event_add()
780 struct event_base *base; in event_del() local
791 base = ev->ev_base; in event_del()
792 evsel = base->evsel; in event_del()
793 evbase = base->evbase; in event_del()
804 event_queue_remove(base, ev, EVLIST_TIMEOUT); in event_del()
807 event_queue_remove(base, ev, EVLIST_ACTIVE); in event_del()
810 event_queue_remove(base, ev, EVLIST_INSERTED); in event_del()
833 timeout_next(struct event_base *base, struct timeval **tv_p) in timeout_next() argument
839 if ((ev = min_heap_top(&base->timeheap)) == NULL) { in timeout_next()
845 if (gettime(base, &now) == -1) in timeout_next()
869 timeout_correct(struct event_base *base, struct timeval *tv) in timeout_correct() argument
879 gettime(base, tv); in timeout_correct()
880 if (evutil_timercmp(tv, &base->event_tv, >=)) { in timeout_correct()
881 base->event_tv = *tv; in timeout_correct()
887 evutil_timersub(&base->event_tv, tv, &off); in timeout_correct()
893 pev = base->timeheap.p; in timeout_correct()
894 size = base->timeheap.n; in timeout_correct()
900 base->event_tv = *tv; in timeout_correct()
904 timeout_process(struct event_base *base) in timeout_process() argument
909 if (min_heap_empty(&base->timeheap)) in timeout_process()
912 gettime(base, &now); in timeout_process()
914 while ((ev = min_heap_top(&base->timeheap))) { in timeout_process()
928 event_queue_remove(struct event_base *base, struct event *ev, int queue) in event_queue_remove() argument
935 base->event_count--; in event_queue_remove()
940 TAILQ_REMOVE(&base->eventqueue, ev, ev_next); in event_queue_remove()
943 base->event_count_active--; in event_queue_remove()
944 TAILQ_REMOVE(base->activequeues[ev->ev_pri], in event_queue_remove()
948 min_heap_erase(&base->timeheap, ev); in event_queue_remove()
956 event_queue_insert(struct event_base *base, struct event *ev, int queue) in event_queue_insert() argument
968 base->event_count++; in event_queue_insert()
973 TAILQ_INSERT_TAIL(&base->eventqueue, ev, ev_next); in event_queue_insert()
976 base->event_count_active++; in event_queue_insert()
977 TAILQ_INSERT_TAIL(base->activequeues[ev->ev_pri], in event_queue_insert()
981 min_heap_push(&base->timeheap, ev); in event_queue_insert()