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

Reply via email to