]> granicus.if.org Git - libevent/commitdiff
Remove some duplicate code in kqueue.c and fix a small memory leak.
authorNick Mathewson <nickm@torproject.org>
Fri, 30 Oct 2009 22:43:53 +0000 (22:43 +0000)
committerNick Mathewson <nickm@torproject.org>
Fri, 30 Oct 2009 22:43:53 +0000 (22:43 +0000)
svn:r1483

kqueue.c

index 86f58780d278159128f2cc1b42d3bef8f6326576..335208d382e94111d8ac9102268140aea4351299 100644 (file)
--- 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)