[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.29.4.2 and 1.30

version 1.29.4.2, 1999/01/25 05:49:42 version 1.30, 1998/01/05 09:12:29
Line 79  socreate(dom, aso, type, proto)
Line 79  socreate(dom, aso, type, proto)
                 return (EPROTOTYPE);                  return (EPROTOTYPE);
         MALLOC(so, struct socket *, sizeof(*so), M_SOCKET, M_WAIT);          MALLOC(so, struct socket *, sizeof(*so), M_SOCKET, M_WAIT);
         bzero((caddr_t)so, sizeof(*so));          bzero((caddr_t)so, sizeof(*so));
         TAILQ_INIT(&so->so_q0);  
         TAILQ_INIT(&so->so_q);  
         so->so_type = type;          so->so_type = type;
         so->so_proto = prp;          so->so_proto = prp;
         error = (*prp->pr_usrreq)(so, PRU_ATTACH, (struct mbuf *)0,          error = (*prp->pr_usrreq)(so, PRU_ATTACH, (struct mbuf *)0,
Line 129  solisten(so, backlog)
Line 127  solisten(so, backlog)
                 splx(s);                  splx(s);
                 return (error);                  return (error);
         }          }
         if (so->so_q.tqh_first == NULL)          if (so->so_q == 0)
                 so->so_options |= SO_ACCEPTCONN;                  so->so_options |= SO_ACCEPTCONN;
         if (backlog < 0)          if (backlog < 0)
                 backlog = 0;                  backlog = 0;
Line 146  sofree(so)
Line 144  sofree(so)
         if (so->so_pcb || (so->so_state & SS_NOFDREF) == 0)          if (so->so_pcb || (so->so_state & SS_NOFDREF) == 0)
                 return;                  return;
         if (so->so_head) {          if (so->so_head) {
                 /*                  if (!soqremque(so, 0) && !soqremque(so, 1))
                  * We must not decommission a socket that's on the accept(2)                          panic("sofree dq");
                  * queue.  If we do, then accept(2) may hang after select(2)                  so->so_head = 0;
                  * indicated that the listening socket was ready.  
                  */  
                 if (!soqremque(so, 0))  
                         return;  
         }          }
         sbrelease(&so->so_snd);          sbrelease(&so->so_snd);
         sorflush(so);          sorflush(so);
Line 168  int
Line 162  int
 soclose(so)  soclose(so)
         register struct socket *so;          register struct socket *so;
 {  {
         struct socket *so2;  
         int s = splsoftnet();           /* conservative */          int s = splsoftnet();           /* conservative */
         int error = 0;          int error = 0;
   
         if (so->so_options & SO_ACCEPTCONN) {          if (so->so_options & SO_ACCEPTCONN) {
                 while ((so2 = so->so_q0.tqh_first) != 0) {                  while (so->so_q0)
                         (void) soqremque(so2, 0);                          (void) soabort(so->so_q0);
                         (void) soabort(so2);                  while (so->so_q)
                 }                          (void) soabort(so->so_q);
                 while ((so2 = so->so_q.tqh_first) != 0) {  
                         (void) soqremque(so2, 1);  
                         (void) soabort(so2);  
                 }  
         }          }
         if (so->so_pcb == 0)          if (so->so_pcb == 0)
                 goto discard;                  goto discard;
Line 243  soaccept(so, nam)
Line 232  soaccept(so, nam)
         if ((so->so_state & SS_NOFDREF) == 0)          if ((so->so_state & SS_NOFDREF) == 0)
                 panic("soaccept: !NOFDREF");                  panic("soaccept: !NOFDREF");
         so->so_state &= ~SS_NOFDREF;          so->so_state &= ~SS_NOFDREF;
         if ((so->so_state & SS_ISDISCONNECTED) == 0)          error = (*so->so_proto->pr_usrreq)(so, PRU_ACCEPT, (struct mbuf *)0,
                 error = (*so->so_proto->pr_usrreq)(so, PRU_ACCEPT,              nam, (struct mbuf *)0, (struct proc *)0);
                     (struct mbuf *)0, nam, (struct mbuf *)0, (struct proc *)0);  
         else  
                 error = 0;  
         splx(s);          splx(s);
         return (error);          return (error);
 }  }

Legend:
Removed from v.1.29.4.2  
changed lines
  Added in v.1.30

CVSweb <webmaster@jp.NetBSD.org>