aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/kern_event.c
diff options
context:
space:
mode:
authorJonathan Lemon <jlemon@FreeBSD.org>2000-07-18 21:41:47 +0000
committerJonathan Lemon <jlemon@FreeBSD.org>2000-07-18 21:41:47 +0000
commit2ba03123c5de8ca8cd86a2603503a3af6d4bb12f (patch)
treedca10ff4071ab47ab23d025a7e3699678593d62e /sys/kern/kern_event.c
parentd98c7b9a99af829b67d202a74d3c70d6e6b06517 (diff)
downloadsrc-2ba03123c5de8ca8cd86a2603503a3af6d4bb12f.tar.gz
src-2ba03123c5de8ca8cd86a2603503a3af6d4bb12f.zip
Fix a bug which would cause some knotes to get lost when two kqueues
were being used in a process at the same time. Test case provided by: Chris Peiffer <peifferc@CS.Stanford.EDU>
Notes
Notes: svn path=/head/; revision=63470
Diffstat (limited to 'sys/kern/kern_event.c')
-rw-r--r--sys/kern/kern_event.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/sys/kern/kern_event.c b/sys/kern/kern_event.c
index 724b568456a4..2f1a390f0de7 100644
--- a/sys/kern/kern_event.c
+++ b/sys/kern/kern_event.c
@@ -311,7 +311,8 @@ kqueue(struct proc *p, struct kqueue_args *uap)
TAILQ_INIT(&kq->kq_head);
fp->f_data = (caddr_t)kq;
p->p_retval[0] = fd;
- fdp->fd_knlistsize = 0; /* mark this fdesc as having a kq */
+ if (fdp->fd_knlistsize < 0)
+ fdp->fd_knlistsize = 0; /* this process has a kq */
kq->kq_fdp = fdp;
return (error);
}