On Mon, May 21, 2018 at 01:41:45PM +0200, Martin Pieuchot wrote: > Diff below fixes that, ok?
This part modifies the struct socket. It would run without netlock in your diff. if (nflag & FNONBLOCK) so->so_state |= SS_NBIO; else so->so_state &= ~SS_NBIO; bluhm > Index: kern/uipc_syscalls.c > =================================================================== > RCS file: /cvs/src/sys/kern/uipc_syscalls.c,v > retrieving revision 1.170 > diff -u -p -r1.170 uipc_syscalls.c > --- kern/uipc_syscalls.c 8 May 2018 08:53:41 -0000 1.170 > +++ kern/uipc_syscalls.c 21 May 2018 11:34:54 -0000 > @@ -338,6 +338,8 @@ doaccept(struct proc *p, int sock, struc > fp->f_flag = FREAD | FWRITE | nflag; > fp->f_ops = &socketops; > error = soaccept(so, nam); > +out: > + sounlock(s); > if (!error && name != NULL) > error = copyaddrout(p, nam, name, namelen, anamelen); > if (!error) { > @@ -349,8 +351,6 @@ doaccept(struct proc *p, int sock, struc > FILE_SET_MATURE(fp, p); > *retval = tmpfd; > } > -out: > - sounlock(s); > m_freem(nam); > if (error) { > fdplock(fdp);