summaryrefslogtreecommitdiff
path: root/devpoll.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 /devpoll.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 'devpoll.c')
-rw-r--r--devpoll.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/devpoll.c b/devpoll.c
index 68def058..b4cdae27 100644
--- a/devpoll.c
+++ b/devpoll.c
@@ -76,6 +76,7 @@ int devpoll_add (void *, struct event *);
int devpoll_del (void *, struct event *);
int devpoll_recalc (struct event_base *, void *, int);
int devpoll_dispatch (struct event_base *, void *, struct timeval *);
+void devpoll_dealloc (void *);
struct eventop devpollops = {
"devpoll",
@@ -83,7 +84,8 @@ struct eventop devpollops = {
devpoll_add,
devpoll_del,
devpoll_recalc,
- devpoll_dispatch
+ devpoll_dispatch,
+ devpoll_dealloc
};
#define NEVENT 32000
@@ -401,3 +403,21 @@ devpoll_del(void *arg, struct event *ev)
return (0);
}
+
+void
+devpoll_dealloc(void *arg)
+{
+ struct devpollop *devpollop = arg;
+
+ if (devpollop->fds)
+ free(devpollop->fds);
+ if (devpollop->events)
+ free(devpollop->events);
+ if (devpollop->changes)
+ free(devpollop->changes);
+ if (devpollop->dpfd >= 0)
+ close(devpollop->dpfd);
+
+ memset(devpollop, 0, sizeof(struct devpollop));
+ free(devpollop);
+}