On Wed, Jan 25, 2017 at 11:02:22AM -0500, David Hill wrote: > splassert: yield: want 0 have 1 > Starting stack trace... > yield() at yield+0xac > pool_get() at pool_get+0x1ca > socreate() at socreate+0xba > sys_socket() at sys_socket+0x135 > syscall() at syscall+0x27b > --- syscall (number 97) --- > end of kernel > end trace frame: 0x1b1a16c05800, count: 252 > 0x1b197d23277a: > End of stack trace.
This one looks easy. We do not need a lock to setup the still private so structure. ok? bluhm Index: kern/uipc_socket.c =================================================================== RCS file: /cvs/src/sys/kern/uipc_socket.c,v retrieving revision 1.173 diff -u -p -r1.173 uipc_socket.c --- kern/uipc_socket.c 25 Jan 2017 16:45:50 -0000 1.173 +++ kern/uipc_socket.c 25 Jan 2017 18:01:06 -0000 @@ -123,7 +123,6 @@ socreate(int dom, struct socket **aso, i return (EPROTONOSUPPORT); if (prp->pr_type != type) return (EPROTOTYPE); - NET_LOCK(s); so = pool_get(&socket_pool, PR_WAITOK | PR_ZERO); TAILQ_INIT(&so->so_q0); TAILQ_INIT(&so->so_q); @@ -136,6 +135,7 @@ socreate(int dom, struct socket **aso, i so->so_egid = p->p_ucred->cr_gid; so->so_cpid = p->p_p->ps_pid; so->so_proto = prp; + NET_LOCK(s); error = (*prp->pr_usrreq)(so, PRU_ATTACH, NULL, (struct mbuf *)(long)proto, NULL, p); if (error) {