diff options
| author | John Baldwin <jhb@FreeBSD.org> | 2010-04-14 15:33:15 +0000 |
|---|---|---|
| committer | John Baldwin <jhb@FreeBSD.org> | 2010-04-14 15:33:15 +0000 |
| commit | 805de54cfcc90e1ad0f2e11f4c0edb06a7c5df5f (patch) | |
| tree | d211cca00e3e55e917433315ebad80759b76d956 | |
| parent | f70ad5484f0bf06d599b98a6a8cfd47739789c0b (diff) | |
Notes
| -rw-r--r-- | sys/kern/kern_event.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/sys/kern/kern_event.c b/sys/kern/kern_event.c index 9109e0e087d1..bcfe2767a75f 100644 --- a/sys/kern/kern_event.c +++ b/sys/kern/kern_event.c @@ -1203,7 +1203,7 @@ static int kqueue_expand(struct kqueue *kq, struct filterops *fops, uintptr_t ident, int waitok) { - struct klist *list, *tmp_knhash; + struct klist *list, *tmp_knhash, *to_free; u_long tmp_knhashmask; int size; int fd; @@ -1211,6 +1211,7 @@ kqueue_expand(struct kqueue *kq, struct filterops *fops, uintptr_t ident, KQ_NOTOWNED(kq); + to_free = NULL; if (fops->f_isfd) { fd = ident; if (kq->kq_knlistsize <= fd) { @@ -1222,13 +1223,13 @@ kqueue_expand(struct kqueue *kq, struct filterops *fops, uintptr_t ident, return ENOMEM; KQ_LOCK(kq); if (kq->kq_knlistsize > fd) { - free(list, M_KQUEUE); + to_free = list; list = NULL; } else { if (kq->kq_knlist != NULL) { bcopy(kq->kq_knlist, list, kq->kq_knlistsize * sizeof list); - free(kq->kq_knlist, M_KQUEUE); + to_free = kq->kq_knlist; kq->kq_knlist = NULL; } bzero((caddr_t)list + @@ -1250,11 +1251,12 @@ kqueue_expand(struct kqueue *kq, struct filterops *fops, uintptr_t ident, kq->kq_knhash = tmp_knhash; kq->kq_knhashmask = tmp_knhashmask; } else { - free(tmp_knhash, M_KQUEUE); + to_free = tmp_knhash; } KQ_UNLOCK(kq); } } + free(to_free, M_KQUEUE); KQ_NOTOWNED(kq); return 0; |
