[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.87 and 1.92

version 1.87, 2003/09/06 22:03:10 version 1.92, 2004/03/17 09:58:15
Line 90  __KERNEL_RCSID(0, "$NetBSD$");
Line 90  __KERNEL_RCSID(0, "$NetBSD$");
 #include <sys/resourcevar.h>  #include <sys/resourcevar.h>
 #include <sys/pool.h>  #include <sys/pool.h>
 #include <sys/event.h>  #include <sys/event.h>
   #include <sys/poll.h>
   
 #include <uvm/uvm.h>  #include <uvm/uvm.h>
   
Line 125  void
Line 126  void
 soinit(void)  soinit(void)
 {  {
   
           /* Set the initial adjusted socket buffer size. */
           if (sb_max_set(sb_max))
                   panic("bad initial sb_max value: %lu\n", sb_max);
   
         pool_init(&socket_pool, sizeof(struct socket), 0, 0, 0,          pool_init(&socket_pool, sizeof(struct socket), 0, 0, 0,
             "sockpl", NULL);              "sockpl", NULL);
   
Line 244  sodopendfree(struct socket *so)
Line 249  sodopendfree(struct socket *so)
                 pool_cache_put(&mbpool_cache, m);                  pool_cache_put(&mbpool_cache, m);
         }          }
   
         for (;;) {  
                 m = so->so_pendfree;  
                 if (m == NULL)  
                         break;  
                 so->so_pendfree = m->m_next;  
                 splx(s);  
   
                 rv += m->m_ext.ext_size;  
                 sodoloanfree((m->m_flags & M_EXT_PAGES) ?  
                     m->m_ext.ext_pgs : NULL, m->m_ext.ext_buf,  
                     m->m_ext.ext_size);  
                 s = splvm();  
                 pool_cache_put(&mbpool_cache, m);  
         }  
   
         splx(s);          splx(s);
         return (rv);          return (rv);
 }  }
Line 266  sodopendfree(struct socket *so)
Line 256  sodopendfree(struct socket *so)
 void  void
 soloanfree(struct mbuf *m, caddr_t buf, size_t size, void *arg)  soloanfree(struct mbuf *m, caddr_t buf, size_t size, void *arg)
 {  {
         struct socket *so = arg;  
         int s;          int s;
   
         if (m == NULL) {          if (m == NULL) {
Line 275  soloanfree(struct mbuf *m, caddr_t buf, 
Line 264  soloanfree(struct mbuf *m, caddr_t buf, 
         }          }
   
         s = splvm();          s = splvm();
         m->m_next = so->so_pendfree;          m->m_next = so_pendfree;
         so->so_pendfree = m;          so_pendfree = m;
         splx(s);          splx(s);
         if (sokvawaiters)          if (sokvawaiters)
                 wakeup(&socurkva);                  wakeup(&socurkva);
Line 430  solisten(struct socket *so, int backlog)
Line 419  solisten(struct socket *so, int backlog)
 void  void
 sofree(struct socket *so)  sofree(struct socket *so)
 {  {
         struct mbuf *m;  
   
         if (so->so_pcb || (so->so_state & SS_NOFDREF) == 0)          if (so->so_pcb || (so->so_state & SS_NOFDREF) == 0)
                 return;                  return;
Line 445  sofree(struct socket *so)
Line 433  sofree(struct socket *so)
         }          }
         sbrelease(&so->so_snd);          sbrelease(&so->so_snd);
         sorflush(so);          sorflush(so);
         while ((m = so->so_pendfree) != NULL) {  
                 so->so_pendfree = m->m_next;  
                 m->m_next = so_pendfree;  
                 so_pendfree = m;  
         }  
         pool_put(&socket_pool, so);          pool_put(&socket_pool, so);
 }  }
   
Line 1506  sogetopt(struct socket *so, int level, i
Line 1489  sogetopt(struct socket *so, int level, i
 void  void
 sohasoutofband(struct socket *so)  sohasoutofband(struct socket *so)
 {  {
         struct proc *p;          fownsignal(so->so_pgid, SIGURG, POLL_PRI, POLLPRI|POLLRDBAND, so);
         ksiginfo_t ksi;  
         memset(&ksi, 0, sizeof(ksi));  
         ksi.ksi_signo = SIGURG;  
   
         if (so->so_pgid < 0)  
                 kgsignal(-so->so_pgid, &ksi, NULL);  
         else if (so->so_pgid > 0 && (p = pfind(so->so_pgid)) != 0)  
                 kpsignal(p, &ksi, NULL);  
         selwakeup(&so->so_rcv.sb_sel);          selwakeup(&so->so_rcv.sb_sel);
 }  }
   

Legend:
Removed from v.1.87  
changed lines
  Added in v.1.92

CVSweb <webmaster@jp.NetBSD.org>