On Wed, May 14, 2014 at 10:03:35PM -0700, Philip Guenther wrote:
> On Wed, May 14, 2014 at 10:02 PM, Philip Guenther <[email protected]>wrote:
> 
> > On Wed, May 14, 2014 at 4:58 AM, Jérémie Courrèges-Anglas 
> > <[email protected]>wrote:
> > ...
> >
> >> So here's the diff I came up with:
> >> - set MSG_TRUNC for atomic protocols only if there is actually a data
> >>   loss
> >> - drop the remaining mbuf(s) if the protocol is atomic *or* it is an
> >>   empty message
> >>
> >> I'm running this, and I can't see the downsides, but I could use eyes
> >> and comments.
> >>
> >> Index: kern/uipc_socket.c
> >> ===================================================================
> >> RCS file: /cvs/src/sys/kern/uipc_socket.c,v
> >> retrieving revision 1.127
> >> diff -u -p -r1.127 uipc_socket.c
> >> --- kern/uipc_socket.c  7 Apr 2014 10:04:17 -0000       1.127
> >> +++ kern/uipc_socket.c  14 May 2014 02:56:09 -0000
> >> @@ -935,13 +935,15 @@ dontblock:
> >>                 }
> >>         }
> >>
> >> -       if (m && pr->pr_flags & PR_ATOMIC) {
> >> +       if (m != NULL && m->m_len != 0 && pr->pr_flags & PR_ATOMIC)
> >> +               /* Drop the remaining data later. */
> >>                 flags |= MSG_TRUNC;
> >> -               if ((flags & MSG_PEEK) == 0)
> >> -                       (void) sbdroprecord(&so->so_rcv);
> >> -       }
> >> +
> >
> >
> > <bikeshed>With the comment 'inside' the 'if', I would probably keep the
> > braces.</bikeshed>
> >
> >
> >         if ((flags & MSG_PEEK) == 0) {
> >> -               if (m == NULL) {
> >> +               if (m != NULL) {
> >> +                       if (m->m_len == 0 || pr->pr_flags & PR_ATOMIC)
> >> +                               sbdroprecord(&so->so_rcv);
> >> +               } else {
> >>                         /*
> >>                          * First part is an inline SB_EMPTY_FIXUP().
> >>  Second
> >>                          * part makes sure sb_lastrecord is up-to-date if
> >>
> >
> ...and that's an ok guenther@. I would suggest prodding claudio@ for good
> measure though.
> 

I wonder what other systems do with regard to fd passing with empty
messages. I always had the feeling that this is not allowed but I never
looked deeper into the standards defining this.

-- 
:wq Claudio

Reply via email to