On 21/05/18(Mon) 14:18, Alexander Bluhm wrote:
> 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.

Indeed, updated diff.

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 13:09:28 -0000
@@ -340,24 +340,25 @@ doaccept(struct proc *p, int sock, struc
        error = soaccept(so, nam);
        if (!error && name != NULL)
                error = copyaddrout(p, nam, name, namelen, anamelen);
+out:
        if (!error) {
                if (nflag & FNONBLOCK)
                        so->so_state |= SS_NBIO;
                else
                        so->so_state &= ~SS_NBIO;
+               sounlock(s);
                fp->f_data = so;
                FILE_SET_MATURE(fp, p);
                *retval = tmpfd;
-       }
-out:
-       sounlock(s);
-       m_freem(nam);
-       if (error) {
+       } else {
+               sounlock(s);
                fdplock(fdp);
                fdremove(fdp, tmpfd);
                closef(fp, p);
                fdpunlock(fdp);
        }
+
+       m_freem(nam);
        FRELE(headfp, p);
        return (error);
 }

Reply via email to