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);