diff options
author | Brad Smith <brad@cvs.openbsd.org> | 2003-10-22 00:25:43 +0000 |
---|---|---|
committer | Brad Smith <brad@cvs.openbsd.org> | 2003-10-22 00:25:43 +0000 |
commit | dc56f0f31575ebf6da4018b277282473204690a1 (patch) | |
tree | 1db2eb67c4b4e07aab1cfd67196f2d2fb046f955 | |
parent | 5195883faed308e230f35a32d876751c910922ce (diff) |
Add wrapper for kqueue() to keep track of the allocated fd and allow it to
be closed. This fixes a file descriptor leak when closing a kqueue() fd.
from FreeBSD
ok marc@
-rw-r--r-- | lib/libpthread/sys/Makefile.inc | 6 | ||||
-rw-r--r-- | lib/libpthread/uthread/Makefile.inc | 3 | ||||
-rw-r--r-- | lib/libpthread/uthread/uthread_init.c | 3 | ||||
-rw-r--r-- | lib/libpthread/uthread/uthread_kqueue.c | 55 |
4 files changed, 62 insertions, 5 deletions
diff --git a/lib/libpthread/sys/Makefile.inc b/lib/libpthread/sys/Makefile.inc index 9aad9340db2..633c31d8b61 100644 --- a/lib/libpthread/sys/Makefile.inc +++ b/lib/libpthread/sys/Makefile.inc @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile.inc,v 1.11 2003/07/22 17:15:12 brad Exp $ +# $OpenBSD: Makefile.inc,v 1.12 2003/10/22 00:25:42 brad Exp $ .PATH: ${SRCDIR}/sys ${SRCDIR}/arch/${MACHINE_ARCH} @@ -23,8 +23,8 @@ HIDDEN_SYSCALLS= accept.o bind.o close.o connect.o dup.o dup2.o \ execve.o fchflags.o fchmod.o fchown.o fcntl.o \ flock.o fpathconf.o fstat.o fstatfs.o fsync.o getdirentries.o \ getlogin.o getpeername.o getsockname.o getsockopt.o ioctl.o kevent.o \ - listen.o msync.o nanosleep.o open.o pipe.o poll.o read.o readv.o \ - recvfrom.o recvmsg.o sched_yield.o select.o sendmsg.o sendto.o \ + kqueue.o listen.o msync.o nanosleep.o open.o pipe.o poll.o read.o \ + readv.o recvfrom.o recvmsg.o sched_yield.o select.o sendmsg.o sendto.o \ setsockopt.o shutdown.o sigaction.o sigaltstack.o \ sigprocmask.o sigsuspend.o \ socket.o socketpair.o wait4.o write.o writev.o \ diff --git a/lib/libpthread/uthread/Makefile.inc b/lib/libpthread/uthread/Makefile.inc index 4c1c840eee4..b37a3cf4fc3 100644 --- a/lib/libpthread/uthread/Makefile.inc +++ b/lib/libpthread/uthread/Makefile.inc @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile.inc,v 1.14 2003/01/20 18:12:11 marc Exp $ +# $OpenBSD: Makefile.inc,v 1.15 2003/10/22 00:25:42 brad Exp $ # $FreeBSD: Makefile.inc,v 1.19 1999/08/28 00:03:19 peter Exp $ # uthread sources @@ -67,6 +67,7 @@ SRCS+= \ uthread_join.c \ uthread_kern.c \ uthread_kevent.c \ + uthread_kqueue.c \ uthread_kill.c \ uthread_listen.c \ uthread_main_np.c \ diff --git a/lib/libpthread/uthread/uthread_init.c b/lib/libpthread/uthread/uthread_init.c index a226a09b912..bb5bc1f34a4 100644 --- a/lib/libpthread/uthread/uthread_init.c +++ b/lib/libpthread/uthread/uthread_init.c @@ -1,4 +1,4 @@ -/* $OpenBSD: uthread_init.c,v 1.29 2003/05/13 16:49:32 marc Exp $ */ +/* $OpenBSD: uthread_init.c,v 1.30 2003/10/22 00:25:42 brad Exp $ */ /* * Copyright (c) 1995-1998 John Birrell <jb@cimlogic.com.au> * All rights reserved. @@ -100,6 +100,7 @@ static void *references[] = { &getsockopt, &ioctl, &kevent, + &kqueue, &listen, &msync, &nanosleep, diff --git a/lib/libpthread/uthread/uthread_kqueue.c b/lib/libpthread/uthread/uthread_kqueue.c new file mode 100644 index 00000000000..7ba41db1f48 --- /dev/null +++ b/lib/libpthread/uthread/uthread_kqueue.c @@ -0,0 +1,55 @@ +/* $OpenBSD: uthread_kqueue.c,v 1.1 2003/10/22 00:25:42 brad Exp $ */ + +/* + * Copyright (c) 2003 Mark Peek <mp@freebsd.org> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD: uthread_kqueue.c,v 1.1 2003/07/25 17:02:33 mp Exp $ + */ + +#include <sys/types.h> +#include <sys/event.h> +#include <fcntl.h> +#include <unistd.h> +#ifdef _THREAD_SAFE +#include <pthread.h> +#include "pthread_private.h" + +int +kqueue(void) +{ + int fd; + + /* Create a kqueue: */ + if ((fd = _thread_sys_kqueue()) < 0) { + /* Error creating socket. */ + + /* Initialise the entry in the file descriptor table: */ + } else if (_thread_fd_table_init(fd) != 0) { + _thread_sys_close(fd); + fd = -1; + } + return (fd); +} +#endif |