[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.4.5 and 1.51

version 1.50.4.5, 2002/09/18 16:04:53 version 1.51, 2000/12/10 23:16:28
Line 262  soaccept(so, nam)
Line 262  soaccept(so, nam)
         struct mbuf *nam;          struct mbuf *nam;
 {  {
         int s = splsoftnet();          int s = splsoftnet();
         int error = 0;          int error;
   
         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 = ECONNABORTED;                  error = 0;
   
         splx(s);          splx(s);
         return (error);          return (error);
 }  }
Line 569  soreceive(so, paddr, uio, mp0, controlp,
Line 568  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 684  dontblock:
Line 682  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 703  dontblock:
Line 700  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 760  dontblock:
Line 756  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.4.5  
changed lines
  Added in v.1.51

CVSweb <webmaster@jp.NetBSD.org>