diff options
author | 2001-11-27 15:51:36 +0000 | |
---|---|---|
committer | 2001-11-27 15:51:36 +0000 | |
commit | 145e6ceb2a025168c5df9f40534cc42e72918ae2 (patch) | |
tree | ad0cf7454170a4bc6b84918d0a55c32af6fb1cb9 /sys/kern/uipc_socket2.c | |
parent | kill breada (diff) | |
download | wireguard-openbsd-145e6ceb2a025168c5df9f40534cc42e72918ae2.tar.xz wireguard-openbsd-145e6ceb2a025168c5df9f40534cc42e72918ae2.zip |
change socket connection queues to use TAILQ_
from NetBSD:
Wed Jan 7 23:47:08 1998 UTC by thorpej
Make insertion and removal of sockets from the partial and incoming
connections queues O(C) rather than O(N).
Diffstat (limited to 'sys/kern/uipc_socket2.c')
-rw-r--r-- | sys/kern/uipc_socket2.c | 48 |
1 files changed, 19 insertions, 29 deletions
diff --git a/sys/kern/uipc_socket2.c b/sys/kern/uipc_socket2.c index 755669c07df..5b8d6e19efc 100644 --- a/sys/kern/uipc_socket2.c +++ b/sys/kern/uipc_socket2.c @@ -1,4 +1,4 @@ -/* $OpenBSD: uipc_socket2.c,v 1.20 2001/09/26 03:39:59 deraadt Exp $ */ +/* $OpenBSD: uipc_socket2.c,v 1.21 2001/11/27 15:51:36 provos Exp $ */ /* $NetBSD: uipc_socket2.c,v 1.11 1996/02/04 02:17:55 christos Exp $ */ /* @@ -192,53 +192,43 @@ sonewconn(head, connstatus) } void -soqinsque(head, so, q) - register struct socket *head, *so; - int q; +soqinsque(struct socket *head, struct socket *so, int q) { - register struct socket **prev; +#ifdef DIAGNOSTIC + if (so->so_onq != NULL) + panic("soqinsque"); +#endif + so->so_head = head; if (q == 0) { head->so_q0len++; - so->so_q0 = 0; - for (prev = &(head->so_q0); *prev; ) - prev = &((*prev)->so_q0); + so->so_onq = &head->so_q0; } else { head->so_qlen++; - so->so_q = 0; - for (prev = &(head->so_q); *prev; ) - prev = &((*prev)->so_q); + so->so_onq = &head->so_q; } - *prev = so; + TAILQ_INSERT_TAIL(so->so_onq, so, so_qe); } int -soqremque(so, q) - register struct socket *so; - int q; +soqremque(struct socket *so, int q) { - register struct socket *head, *prev, *next; + struct socket *head; head = so->so_head; - prev = head; - for (;;) { - next = q ? prev->so_q : prev->so_q0; - if (next == so) - break; - if (next == 0) - return (0); - prev = next; - } if (q == 0) { - prev->so_q0 = next->so_q0; + if (so->so_onq != &head->so_q0) + return (0); head->so_q0len--; } else { - prev->so_q = next->so_q; + if (so->so_onq != &head->so_q) + return (0); head->so_qlen--; } - next->so_q0 = next->so_q = 0; - next->so_head = 0; + TAILQ_REMOVE(so->so_onq, so, so_qe); + so->so_onq = NULL; + so->so_head = NULL; return (1); } |