[BACK]Return to uipc_socket.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / kern

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/sys/kern/uipc_socket.c between version 1.50 and 1.50.4.4

version 1.50, 2000/03/30 09:27:14 version 1.50.4.4, 2002/06/12 20:41:45
Line 126  socreate(dom, aso, type, proto)
Line 126  socreate(dom, aso, type, proto)
 }  }
   
 int  int
 sobind(so, nam)  sobind(so, nam, p)
         struct socket *so;          struct socket *so;
         struct mbuf *nam;          struct mbuf *nam;
           struct proc *p;
 {  {
         struct proc *p = curproc;               /* XXX */  
         int s = splsoftnet();          int s = splsoftnet();
         int error;          int error;
   
Line 262  soaccept(so, nam)
Line 262  soaccept(so, nam)
         struct mbuf *nam;          struct mbuf *nam;
 {  {
         int s = splsoftnet();          int s = splsoftnet();
         int error;          int error = 0;
   
         if ((so->so_state & SS_NOFDREF) == 0)          if ((so->so_state & SS_NOFDREF) == 0)
                 panic("soaccept: !NOFDREF");                  panic("soaccept: !NOFDREF");
Line 271  soaccept(so, nam)
Line 271  soaccept(so, nam)
                 error = (*so->so_proto->pr_usrreq)(so, PRU_ACCEPT,                  error = (*so->so_proto->pr_usrreq)(so, PRU_ACCEPT,
                     (struct mbuf *)0, nam, (struct mbuf *)0, (struct proc *)0);                      (struct mbuf *)0, nam, (struct mbuf *)0, (struct proc *)0);
         else          else
                 error = 0;                  nam->m_len = 0;
   
         splx(s);          splx(s);
         return (error);          return (error);
 }  }
Line 568  soreceive(so, paddr, uio, mp0, controlp,
Line 569  soreceive(so, paddr, uio, mp0, controlp,
         struct mbuf *nextrecord;          struct mbuf *nextrecord;
         int moff, type = 0;          int moff, type = 0;
         int orig_resid = uio->uio_resid;          int orig_resid = uio->uio_resid;
           int mbuf_removed = 0;
   
         mp = mp0;          mp = mp0;
         if (paddr)          if (paddr)
Line 682  dontblock:
Line 684  dontblock:
                         m = m->m_next;                          m = m->m_next;
                 } else {                  } else {
                         sbfree(&so->so_rcv, m);                          sbfree(&so->so_rcv, m);
                           mbuf_removed = 1;
                         if (paddr) {                          if (paddr) {
                                 *paddr = m;                                  *paddr = m;
                                 so->so_rcv.sb_mb = m->m_next;                                  so->so_rcv.sb_mb = m->m_next;
Line 700  dontblock:
Line 703  dontblock:
                         m = m->m_next;                          m = m->m_next;
                 } else {                  } else {
                         sbfree(&so->so_rcv, m);                          sbfree(&so->so_rcv, m);
                           mbuf_removed = 1;
                         if (controlp) {                          if (controlp) {
                                 if (pr->pr_domain->dom_externalize &&                                  if (pr->pr_domain->dom_externalize &&
                                     mtod(m, struct cmsghdr *)->cmsg_type ==                                      mtod(m, struct cmsghdr *)->cmsg_type ==
Line 756  dontblock:
Line 760  dontblock:
                         splx(s);                          splx(s);
                         error = uiomove(mtod(m, caddr_t) + moff, (int)len, uio);                          error = uiomove(mtod(m, caddr_t) + moff, (int)len, uio);
                         s = splsoftnet();                          s = splsoftnet();
                           if (error) {
                                   /*
                                    * If any part of the record has been removed
                                    * (such as the MT_SONAME mbuf, which will
                                    * happen when PR_ADDR, and thus also
                                    * PR_ATOMIC, is set), then drop the entire
                                    * record to maintain the atomicity of the
                                    * receive operation.
                                    *
                                    * This avoids a later panic("receive 1a")
                                    * when compiled with DIAGNOSTIC.
                                    */
                                   if (m && mbuf_removed
                                       && (pr->pr_flags & PR_ATOMIC))
                                           (void) sbdroprecord(&so->so_rcv);
   
                                   goto release;
                           }
                 } else                  } else
                         uio->uio_resid -= len;                          uio->uio_resid -= len;
                 if (len == m->m_len - moff) {                  if (len == m->m_len - moff) {

Legend:
Removed from v.1.50  
changed lines
  Added in v.1.50.4.4

CVSweb <webmaster@jp.NetBSD.org>