summaryrefslogtreecommitdiff
path: root/kqueue.c
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2009-10-30 22:43:53 +0000
committerNick Mathewson <nickm@torproject.org>2009-10-30 22:43:53 +0000
commit315fde1a70da1c1e4b9565f38f52680e23114a84 (patch)
tree4e1c6c6e5f1cb576d02939cfdb30c2aba425e3b0 /kqueue.c
parent96c6956e0247f615d8afd25d79586dfa5b478ef0 (diff)
downloadlibevent-315fde1a70da1c1e4b9565f38f52680e23114a84.tar.gz
Remove some duplicate code in kqueue.c and fix a small memory leak.
svn:r1483
Diffstat (limited to 'kqueue.c')
-rw-r--r--kqueue.c25
1 files changed, 15 insertions, 10 deletions
diff --git a/kqueue.c b/kqueue.c
index 86f58780..335208d3 100644
--- a/kqueue.c
+++ b/kqueue.c
@@ -79,6 +79,8 @@ struct kqop {
pid_t pid;
};
+static void kqop_free(struct kqop *kqop);
+
static void *kq_init (struct event_base *);
static int kq_add (struct event_base *, int, short, short, void *);
static int kq_del (struct event_base *, int, short, short, void *);
@@ -167,13 +169,9 @@ kq_init(struct event_base *base)
return (kqueueop);
err:
- if (kqueueop->changes)
- mm_free(kqueueop->changes);
- if (kqueueop->pend_changes)
- mm_free(kqueueop->pend_changes);
- if (kq >= 0)
- close(kq);
- mm_free(kqueueop);
+ if (kqueueop)
+ kqop_free(kqueueop);
+
return (NULL);
}
@@ -390,12 +388,12 @@ kq_del(struct event_base *base, int fd, short old, short events, void *p)
}
static void
-kq_dealloc(struct event_base *base)
+kqop_free(struct kqop *kqop)
{
- struct kqop *kqop = base->evbase;
-
if (kqop->changes)
mm_free(kqop->changes);
+ if (kqop->pend_changes)
+ mm_free(kqop->pend_changes);
if (kqop->events)
mm_free(kqop->events);
if (kqop->kq >= 0 && kqop->pid == getpid())
@@ -404,6 +402,13 @@ kq_dealloc(struct event_base *base)
mm_free(kqop);
}
+static void
+kq_dealloc(struct event_base *base)
+{
+ struct kqop *kqop = base->evbase;
+ kqop_free(kqop);
+}
+
/* signal handling */
static int
kq_sig_add(struct event_base *base, int nsignal, short old, short events, void *p)