summaryrefslogtreecommitdiff
path: root/poll.c
diff options
context:
space:
mode:
authorNiels Provos <provos@gmail.com>2006-03-28 04:40:54 +0000
committerNiels Provos <provos@gmail.com>2006-03-28 04:40:54 +0000
commit2e8051f593abd20b961e85c3f99dfa0ac0ee375d (patch)
treeb842366c26f182d98130bb266aaa632242416345 /poll.c
parent571ac95430c344d4688c28adaa8aa53956cd12a7 (diff)
downloadlibevent-2e8051f593abd20b961e85c3f99dfa0ac0ee375d.tar.gz
introduce a way to free the base from Nick Mathewson <nickm@freehaven.net>
svn:r210
Diffstat (limited to 'poll.c')
-rw-r--r--poll.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/poll.c b/poll.c
index 698bbbf3..f05819e0 100644
--- a/poll.c
+++ b/poll.c
@@ -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 *
@@ -355,3 +357,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);
+}