Lines Matching full:base
81 gettime(struct event_base *base, struct timeval *tp) in gettime() argument
85 if (base->tv_cache.tv_sec) { in gettime()
86 *tp = base->tv_cache; in gettime()
99 struct event_base *base = event_base_new(); in event_init() local
101 if (base != NULL) in event_init()
102 current_base = base; in event_init()
104 return (base); in event_init()
111 struct event_base *base; in event_base_new() local
113 if ((base = calloc(1, sizeof(struct event_base))) == NULL) in event_base_new()
119 gettime(base, &base->event_tv); in event_base_new()
121 min_heap_ctor(&base->timeheap); in event_base_new()
122 TAILQ_INIT(&base->eventqueue); in event_base_new()
123 base->sig.ev_signal_pair[0] = -1; in event_base_new()
124 base->sig.ev_signal_pair[1] = -1; in event_base_new()
126 base->evbase = NULL; in event_base_new()
127 for (i = 0; eventops[i] && !base->evbase; i++) { in event_base_new()
128 base->evsel = eventops[i]; in event_base_new()
130 base->evbase = base->evsel->init(base); in event_base_new()
133 if (base->evbase == NULL) in event_base_new()
137 event_msgx("libevent using: %s", base->evsel->name); in event_base_new()
140 event_base_priority_init(base, 1); in event_base_new()
142 return (base); in event_base_new()
146 event_base_free(struct event_base *base) in event_base_free() argument
152 if (base == NULL && current_base) in event_base_free()
153 base = current_base; in event_base_free()
154 if (base == current_base) in event_base_free()
158 assert(base); in event_base_free()
160 for (ev = TAILQ_FIRST(&base->eventqueue); ev; ) { in event_base_free()
168 while ((ev = min_heap_top(&base->timeheap)) != NULL) { in event_base_free()
173 for (i = 0; i < base->nactivequeues; ++i) { in event_base_free()
174 for (ev = TAILQ_FIRST(base->activequeues[i]); ev; ) { in event_base_free()
185 event_debug(("%s: %zu events were still set in base", in event_base_free()
188 if (base->evsel->dealloc != NULL) in event_base_free()
189 base->evsel->dealloc(base, base->evbase); in event_base_free()
191 for (i = 0; i < base->nactivequeues; ++i) in event_base_free()
192 assert(TAILQ_EMPTY(base->activequeues[i])); in event_base_free()
194 assert(min_heap_empty(&base->timeheap)); in event_base_free()
195 min_heap_dtor(&base->timeheap); in event_base_free()
197 for (i = 0; i < base->nactivequeues; ++i) in event_base_free()
198 free(base->activequeues[i]); in event_base_free()
199 free(base->activequeues); in event_base_free()
201 assert(TAILQ_EMPTY(&base->eventqueue)); in event_base_free()
203 free(base); in event_base_free()
206 /* reinitialized the event base after a fork */
208 event_reinit(struct event_base *base) in event_reinit() argument
210 const struct eventop *evsel = base->evsel; in event_reinit()
211 void *evbase = base->evbase; in event_reinit()
225 if (base->sig.ev_signal_added) { in event_reinit()
226 /* we cannot call event_del here because the base has in event_reinit()
228 event_queue_remove(base, &base->sig.ev_signal, in event_reinit()
230 if (base->sig.ev_signal.ev_flags & EVLIST_ACTIVE) in event_reinit()
231 event_queue_remove(base, &base->sig.ev_signal, in event_reinit()
233 base->sig.ev_signal_added = 0; in event_reinit()
236 if (base->evsel->dealloc != NULL) in event_reinit()
237 base->evsel->dealloc(base, base->evbase); in event_reinit()
238 evbase = base->evbase = evsel->init(base); in event_reinit()
239 if (base->evbase == NULL) in event_reinit()
243 TAILQ_FOREACH(ev, &base->eventqueue, ev_next) { in event_reinit()
258 event_base_priority_init(struct event_base *base, int npriorities) in event_base_priority_init() argument
262 if (base->event_count_active) in event_base_priority_init()
265 if (npriorities == base->nactivequeues) in event_base_priority_init()
268 if (base->nactivequeues) { in event_base_priority_init()
269 for (i = 0; i < base->nactivequeues; ++i) { in event_base_priority_init()
270 free(base->activequeues[i]); in event_base_priority_init()
272 free(base->activequeues); in event_base_priority_init()
276 base->nactivequeues = npriorities; in event_base_priority_init()
277 base->activequeues = (struct event_list **) in event_base_priority_init()
278 calloc(base->nactivequeues, sizeof(struct event_list *)); in event_base_priority_init()
279 if (base->activequeues == NULL) in event_base_priority_init()
282 for (i = 0; i < base->nactivequeues; ++i) { in event_base_priority_init()
283 base->activequeues[i] = malloc(sizeof(struct event_list)); in event_base_priority_init()
284 if (base->activequeues[i] == NULL) in event_base_priority_init()
286 TAILQ_INIT(base->activequeues[i]); in event_base_priority_init()
293 event_haveevents(struct event_base *base) in event_haveevents() argument
295 return (base->event_count > 0); in event_haveevents()
305 event_process_active(struct event_base *base) in event_process_active() argument
312 for (i = 0; i < base->nactivequeues; ++i) { in event_process_active()
313 if (TAILQ_FIRST(base->activequeues[i]) != NULL) { in event_process_active()
314 activeq = base->activequeues[i]; in event_process_active()
323 event_queue_remove(base, ev, EVLIST_ACTIVE); in event_process_active()
334 if (event_gotsig || base->event_break) in event_process_active()
357 event_base_get_method(struct event_base *base) in event_base_get_method() argument
359 assert(base); in event_base_get_method()
360 return (base->evsel->name); in event_base_get_method()
366 struct event_base *base = arg; in event_loopexit_cb() local
367 base->event_gotterm = 1; in event_loopexit_cb()
413 event_base_loop(struct event_base *base, int flags) in event_base_loop() argument
415 const struct eventop *evsel = base->evsel; in event_base_loop()
416 void *evbase = base->evbase; in event_base_loop()
422 base->tv_cache.tv_sec = 0; in event_base_loop()
424 if (base->sig.ev_signal_added) in event_base_loop()
425 evsignal_base = base; in event_base_loop()
429 if (base->event_gotterm) { in event_base_loop()
430 base->event_gotterm = 0; in event_base_loop()
434 if (base->event_break) { in event_base_loop()
435 base->event_break = 0; in event_base_loop()
452 if (!base->event_count_active && !(flags & EVLOOP_NONBLOCK)) { in event_base_loop()
453 timeout_next(base, &tv_p); in event_base_loop()
463 if (!event_haveevents(base)) { in event_base_loop()
469 gettime(base, &base->event_tv); in event_base_loop()
472 base->tv_cache.tv_sec = 0; in event_base_loop()
474 res = evsel->dispatch(base, evbase, tv_p); in event_base_loop()
478 gettime(base, &base->tv_cache); in event_base_loop()
480 timeout_process(base); in event_base_loop()
482 if (base->event_count_active) { in event_base_loop()
483 event_process_active(base); in event_base_loop()
484 if (!base->event_count_active && (flags & EVLOOP_ONCE)) in event_base_loop()
491 base->tv_cache.tv_sec = 0; in event_base_loop()
527 event_base_once(struct event_base *base, int fd, short events, in event_base_once() argument
561 res = event_base_set(base, &eonce->ev); in event_base_once()
576 /* Take the current base - caller needs to set the real base later */ in event_set()
596 event_base_set(struct event_base *base, struct event *ev) in event_base_set() argument
598 /* Only innocent events may be assigned to a different base */ in event_base_set()
602 ev->ev_base = base; in event_base_set()
603 ev->ev_pri = base->nactivequeues/2; in event_base_set()
660 struct event_base *base = ev->ev_base; in event_add() local
661 const struct eventop *evsel = base->evsel; in event_add()
662 void *evbase = base->evbase; in event_add()
680 if (min_heap_reserve(&base->timeheap, in event_add()
681 1 + min_heap_size(&base->timeheap)) == -1) in event_add()
689 event_queue_insert(base, ev, EVLIST_INSERTED); in event_add()
704 event_queue_remove(base, ev, EVLIST_TIMEOUT); in event_add()
719 event_queue_remove(base, ev, EVLIST_ACTIVE); in event_add()
722 gettime(base, &now); in event_add()
729 event_queue_insert(base, ev, EVLIST_TIMEOUT); in event_add()
738 struct event_base *base; in event_del() local
745 /* An event without a base has not been added */ in event_del()
749 base = ev->ev_base; in event_del()
750 evsel = base->evsel; in event_del()
751 evbase = base->evbase; in event_del()
762 event_queue_remove(base, ev, EVLIST_TIMEOUT); in event_del()
765 event_queue_remove(base, ev, EVLIST_ACTIVE); in event_del()
768 event_queue_remove(base, ev, EVLIST_INSERTED); in event_del()
791 timeout_next(struct event_base *base, struct timeval **tv_p) in timeout_next() argument
797 if ((ev = min_heap_top(&base->timeheap)) == NULL) { in timeout_next()
803 gettime(base, &now); in timeout_next()
820 timeout_process(struct event_base *base) in timeout_process() argument
825 if (min_heap_empty(&base->timeheap)) in timeout_process()
828 gettime(base, &now); in timeout_process()
830 while ((ev = min_heap_top(&base->timeheap))) { in timeout_process()
844 event_queue_remove(struct event_base *base, struct event *ev, int queue) in event_queue_remove() argument
851 base->event_count--; in event_queue_remove()
856 TAILQ_REMOVE(&base->eventqueue, ev, ev_next); in event_queue_remove()
859 base->event_count_active--; in event_queue_remove()
860 TAILQ_REMOVE(base->activequeues[ev->ev_pri], in event_queue_remove()
864 min_heap_erase(&base->timeheap, ev); in event_queue_remove()
872 event_queue_insert(struct event_base *base, struct event *ev, int queue) in event_queue_insert() argument
884 base->event_count++; in event_queue_insert()
889 TAILQ_INSERT_TAIL(&base->eventqueue, ev, ev_next); in event_queue_insert()
892 base->event_count_active++; in event_queue_insert()
893 TAILQ_INSERT_TAIL(base->activequeues[ev->ev_pri], in event_queue_insert()
897 min_heap_push(&base->timeheap, ev); in event_queue_insert()