[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.164.2.2 and 1.164.2.3

version 1.164.2.2, 2008/09/18 04:31:44 version 1.164.2.3, 2008/10/10 22:34:14
Line 77  __KERNEL_RCSID(0, "$NetBSD$");
Line 77  __KERNEL_RCSID(0, "$NetBSD$");
 #include <sys/proc.h>  #include <sys/proc.h>
 #include <sys/file.h>  #include <sys/file.h>
 #include <sys/filedesc.h>  #include <sys/filedesc.h>
 #include <sys/malloc.h>  #include <sys/kmem.h>
 #include <sys/mbuf.h>  #include <sys/mbuf.h>
 #include <sys/domain.h>  #include <sys/domain.h>
 #include <sys/kernel.h>  #include <sys/kernel.h>
Line 639  soclose(struct socket *so)
Line 639  soclose(struct socket *so)
         error = 0;          error = 0;
         solock(so);          solock(so);
         if (so->so_options & SO_ACCEPTCONN) {          if (so->so_options & SO_ACCEPTCONN) {
                 do {                  for (;;) {
                         while ((so2 = TAILQ_FIRST(&so->so_q0)) != 0) {                          if ((so2 = TAILQ_FIRST(&so->so_q0)) != 0) {
                                 KASSERT(solocked2(so, so2));                                  KASSERT(solocked2(so, so2));
                                 (void) soqremque(so2, 0);                                  (void) soqremque(so2, 0);
                                 /* soabort drops the lock. */                                  /* soabort drops the lock. */
                                 (void) soabort(so2);                                  (void) soabort(so2);
                                 solock(so);                                  solock(so);
                                   continue;
                         }                          }
                         while ((so2 = TAILQ_FIRST(&so->so_q)) != 0) {                          if ((so2 = TAILQ_FIRST(&so->so_q)) != 0) {
                                 KASSERT(solocked2(so, so2));                                  KASSERT(solocked2(so, so2));
                                 (void) soqremque(so2, 1);                                  (void) soqremque(so2, 1);
                                 /* soabort drops the lock. */                                  /* soabort drops the lock. */
                                 (void) soabort(so2);                                  (void) soabort(so2);
                                 solock(so);                                  solock(so);
                                   continue;
                         }                          }
                 } while (!TAILQ_EMPTY(&so->so_q0));                          break;
                   }
         }          }
         if (so->so_pcb == 0)          if (so->so_pcb == 0)
                 goto discard;                  goto discard;
Line 1860  sockopt_alloc(struct sockopt *sopt, size
Line 1863  sockopt_alloc(struct sockopt *sopt, size
         KASSERT(sopt->sopt_size == 0);          KASSERT(sopt->sopt_size == 0);
   
         if (len > sizeof(sopt->sopt_buf))          if (len > sizeof(sopt->sopt_buf))
                 sopt->sopt_data = malloc(len, M_SOOPTS, M_WAITOK | M_ZERO);                  sopt->sopt_data = kmem_zalloc(len, KM_SLEEP);
         else          else
                 sopt->sopt_data = sopt->sopt_buf;                  sopt->sopt_data = sopt->sopt_buf;
   
Line 1890  sockopt_destroy(struct sockopt *sopt)
Line 1893  sockopt_destroy(struct sockopt *sopt)
 {  {
   
         if (sopt->sopt_data != sopt->sopt_buf)          if (sopt->sopt_data != sopt->sopt_buf)
                 free(sopt->sopt_data, M_SOOPTS);                  kmem_free(sopt->sopt_data, sopt->sopt_size);
   
         memset(sopt, 0, sizeof(*sopt));          memset(sopt, 0, sizeof(*sopt));
 }  }

Legend:
Removed from v.1.164.2.2  
changed lines
  Added in v.1.164.2.3

CVSweb <webmaster@jp.NetBSD.org>