diff options
author | 2006-03-30 06:32:36 +0000 | |
---|---|---|
committer | 2006-03-30 06:32:36 +0000 | |
commit | 3ac1ba99f4e58fb1a42c390f97c7508790c97eae (patch) | |
tree | 98fc8ff79d29c3d4dbae3acc011af2589818fcc6 | |
parent | Add rlog -r[REV1][:][REV2] support (diff) | |
download | wireguard-openbsd-3ac1ba99f4e58fb1a42c390f97c7508790c97eae.tar.xz wireguard-openbsd-3ac1ba99f4e58fb1a42c390f97c7508790c97eae.zip |
introduce a way to free the base.
From libevent CVS
-rw-r--r-- | lib/libevent/event.c | 30 | ||||
-rw-r--r-- | lib/libevent/event.h | 4 | ||||
-rw-r--r-- | lib/libevent/kqueue.c | 21 | ||||
-rw-r--r-- | lib/libevent/poll.c | 24 | ||||
-rw-r--r-- | lib/libevent/select.c | 28 | ||||
-rw-r--r-- | lib/libevent/shlib_version | 2 |
6 files changed, 100 insertions, 9 deletions
diff --git a/lib/libevent/event.c b/lib/libevent/event.c index b03918d3f11..fc77faf1964 100644 --- a/lib/libevent/event.c +++ b/lib/libevent/event.c @@ -1,4 +1,4 @@ -/* $OpenBSD: event.c,v 1.12 2006/03/28 15:32:13 brad Exp $ */ +/* $OpenBSD: event.c,v 1.13 2006/03/30 06:32:36 brad Exp $ */ /* * Copyright (c) 2000-2004 Niels Provos <provos@citi.umich.edu> @@ -198,6 +198,33 @@ event_init(void) return (current_base); } +void +event_base_free(struct event_base *base) +{ + int i; + + if (base == NULL && current_base) + base = current_base; + if (base == current_base) + current_base = NULL; + + assert(base); + assert(TAILQ_EMPTY(&base->eventqueue)); + for (i=0; i < base->nactivequeues; ++i) + assert(TAILQ_EMPTY(base->activequeues[i])); + + assert(RB_EMPTY(&base->timetree)); + + for (i = 0; i < base->nactivequeues; ++i) + free(base->activequeues[i]); + free(base->activequeues); + + if (base->evsel->dealloc != NULL) + base->evsel->dealloc(base->evbase); + + free(base); +} + int event_priority_init(int npriorities) { @@ -539,6 +566,7 @@ event_pending(struct event *ev, short event, struct timeval *tv) if (tv != NULL && (flags & event & EV_TIMEOUT)) { gettime(&now); timersub(&ev->ev_timeout, &now, &res); + /* correctly remap to real time */ gettimeofday(&now, NULL); timeradd(&now, &res, tv); } diff --git a/lib/libevent/event.h b/lib/libevent/event.h index 9e79233123c..1c8d29a2203 100644 --- a/lib/libevent/event.h +++ b/lib/libevent/event.h @@ -1,4 +1,4 @@ -/* $OpenBSD: event.h,v 1.14 2006/01/25 05:25:34 brad Exp $ */ +/* $OpenBSD: event.h,v 1.15 2006/03/30 06:32:36 brad Exp $ */ /* * Copyright (c) 2000-2004 Niels Provos <provos@citi.umich.edu> @@ -125,6 +125,7 @@ struct eventop { int (*del)(void *, struct event *); int (*recalc)(struct event_base *, void *, int); int (*dispatch)(struct event_base *, void *, struct timeval *); + void (*dealloc)(void *); }; #define TIMEOUT_DEFAULT {5, 0} @@ -132,6 +133,7 @@ struct eventop { void *event_init(void); int event_dispatch(void); int event_base_dispatch(struct event_base *); +void event_base_free(struct event_base *); #define _EVENT_LOG_DEBUG 0 #define _EVENT_LOG_MSG 1 diff --git a/lib/libevent/kqueue.c b/lib/libevent/kqueue.c index 2f7f8484238..500d7c4dd68 100644 --- a/lib/libevent/kqueue.c +++ b/lib/libevent/kqueue.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kqueue.c,v 1.19 2005/12/20 02:15:28 brad Exp $ */ +/* $OpenBSD: kqueue.c,v 1.20 2006/03/30 06:32:36 brad Exp $ */ /* * Copyright 2000-2002 Niels Provos <provos@citi.umich.edu> @@ -75,6 +75,7 @@ int kq_del (void *, struct event *); int kq_recalc (struct event_base *, void *, int); int kq_dispatch (struct event_base *, void *, struct timeval *); int kq_insert (struct kqop *, struct kevent *); +void kq_dealloc (void *); const struct eventop kqops = { "kqueue", @@ -82,7 +83,8 @@ const struct eventop kqops = { kq_add, kq_del, kq_recalc, - kq_dispatch + kq_dispatch, + kq_dealloc }; void * @@ -394,3 +396,18 @@ kq_del(void *arg, struct event *ev) return (0); } + +void +kq_dealloc(void *arg) +{ + struct kqop *kqop = arg; + + if (kqop->changes) + free(kqop->changes); + if (kqop->events) + free(kqop->events); + if (kqop->kq) + close(kqop->kq); + memset(kqop, 0, sizeof(struct kqop)); + free(kqop); +} diff --git a/lib/libevent/poll.c b/lib/libevent/poll.c index fbc5aca4eff..2e76dfc6613 100644 --- a/lib/libevent/poll.c +++ b/lib/libevent/poll.c @@ -1,4 +1,4 @@ -/* $OpenBSD: poll.c,v 1.11 2005/12/02 04:41:30 deraadt Exp $ */ +/* $OpenBSD: poll.c,v 1.12 2006/03/30 06:32:36 brad Exp $ */ /* * Copyright 2000-2003 Niels Provos <provos@citi.umich.edu> @@ -74,6 +74,7 @@ int poll_add (void *, struct event *); int poll_del (void *, struct event *); int poll_recalc (struct event_base *, void *, int); int poll_dispatch (struct event_base *, void *, struct timeval *); +void poll_dealloc (void *); const struct eventop pollops = { "poll", @@ -81,7 +82,8 @@ const struct eventop pollops = { poll_add, poll_del, poll_recalc, - poll_dispatch + poll_dispatch, + poll_dealloc }; void * @@ -356,3 +358,21 @@ poll_del(void *arg, struct event *ev) poll_check_ok(pop); return (0); } + +void +poll_dealloc(void *arg) +{ + struct pollop *pop = arg; + + if (pop->event_set) + free(pop->event_set); + if (pop->event_r_back) + free(pop->event_r_back); + if (pop->event_w_back) + free(pop->event_w_back); + if (pop->idxplus1_by_fd) + free(pop->idxplus1_by_fd); + + memset(pop, 0, sizeof(struct pollop)); + free(pop); +} diff --git a/lib/libevent/select.c b/lib/libevent/select.c index 48ab2e3ec0c..f3efa390f6e 100644 --- a/lib/libevent/select.c +++ b/lib/libevent/select.c @@ -1,4 +1,4 @@ -/* $OpenBSD: select.c,v 1.11 2005/06/18 01:52:22 brad Exp $ */ +/* $OpenBSD: select.c,v 1.12 2006/03/30 06:32:36 brad Exp $ */ /* * Copyright 2000-2002 Niels Provos <provos@citi.umich.edu> @@ -76,6 +76,7 @@ int select_add (void *, struct event *); int select_del (void *, struct event *); int select_recalc (struct event_base *, void *, int); int select_dispatch (struct event_base *, void *, struct timeval *); +void select_dealloc (void *); const struct eventop selectops = { "select", @@ -83,7 +84,8 @@ const struct eventop selectops = { select_add, select_del, select_recalc, - select_dispatch + select_dispatch, + select_dealloc }; static int select_resize(struct selectop *sop, int fdsz); @@ -350,3 +352,25 @@ select_del(void *arg, struct event *ev) check_selectop(sop); return (0); } + +void +select_dealloc(void *arg) +{ + struct selectop *sop = arg; + + if (sop->event_readset_in) + free(sop->event_readset_in); + if (sop->event_writeset_in) + free(sop->event_writeset_in); + if (sop->event_readset_out) + free(sop->event_readset_out); + if (sop->event_writeset_out) + free(sop->event_writeset_out); + if (sop->event_r_by_fd) + free(sop->event_r_by_fd); + if (sop->event_w_by_fd) + free(sop->event_w_by_fd); + + memset(sop, 0, sizeof(struct selectop)); + free(sop); +} diff --git a/lib/libevent/shlib_version b/lib/libevent/shlib_version index c8860078e50..79d3d3afd76 100644 --- a/lib/libevent/shlib_version +++ b/lib/libevent/shlib_version @@ -1,2 +1,2 @@ major=1 -minor=2 +minor=3 |