On Fri, 1 Nov 2002, Bill Fenner wrote:

> sonewconn() hands sofree() a self-inconsistent socket -- so->so_head is
> set, so so must be on a queue, but sonewconn() hasn't put it on a queue yet.
> Please try this patch.
>
>   Bill
>
> Index: uipc_socket2.c
> ===================================================================
> RCS file: /home/ncvs/src/sys/kern/uipc_socket2.c,v
> retrieving revision 1.104
> diff -u -r1.104 uipc_socket2.c
> --- uipc_socket2.c    18 Sep 2002 19:44:11 -0000      1.104
> +++ uipc_socket2.c    1 Nov 2002 22:40:52 -0000
> @@ -192,7 +192,7 @@
>               return ((struct socket *)0);
>       if ((head->so_options & SO_ACCEPTFILTER) != 0)
>               connstatus = 0;
> -     so->so_head = head;
> +     so->so_head = NULL;
>       so->so_type = head->so_type;
>       so->so_options = head->so_options &~ SO_ACCEPTCONN;
>       so->so_linger = head->so_linger;
> @@ -209,6 +209,7 @@
>               return ((struct socket *)0);
>       }
>
> +     so->so_head = head;
>       if (connstatus) {
>               TAILQ_INSERT_TAIL(&head->so_comp, so, so_list);
>               so->so_state |= SS_COMP;
>

This patch fixes the panics for me. Thanks a lot. I believe it should be
commited.

BTW: I get about 850 fetches pers second on UP an 600 SMP (the same
machine and settings). Don't know if it's expected in this usage pattern.

-- 
Michal Mertl
[EMAIL PROTECTED]





To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message

Reply via email to