[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.97 and 1.98

version 1.97, 2004/03/24 15:34:53 version 1.98, 2004/04/17 15:15:29
Line 162  int sokvawaiters;
Line 162  int sokvawaiters;
   
 static size_t sodopendfree(struct socket *);  static size_t sodopendfree(struct socket *);
 static size_t sodopendfreel(struct socket *);  static size_t sodopendfreel(struct socket *);
 static __inline void sokvareserve(struct socket *, vsize_t);  static __inline vsize_t sokvareserve(struct socket *, vsize_t);
 static __inline void sokvaunreserve(vsize_t);  static __inline void sokvaunreserve(vsize_t);
   
 static __inline void  static __inline vsize_t
 sokvareserve(struct socket *so, vsize_t len)  sokvareserve(struct socket *so, vsize_t len)
 {  {
         int s;          int s;
           int error;
   
         s = splvm();          s = splvm();
         simple_lock(&so_pendfree_slock);          simple_lock(&so_pendfree_slock);
Line 190  sokvareserve(struct socket *so, vsize_t 
Line 191  sokvareserve(struct socket *so, vsize_t 
   
                 SOSEND_COUNTER_INCR(&sosend_kvalimit);                  SOSEND_COUNTER_INCR(&sosend_kvalimit);
                 sokvawaiters++;                  sokvawaiters++;
                 (void) ltsleep(&socurkva, PVM, "sokva", 0, &so_pendfree_slock);                  error = ltsleep(&socurkva, PVM | PCATCH, "sokva", 0,
                       &so_pendfree_slock);
                 sokvawaiters--;                  sokvawaiters--;
                   if (error) {
                           len = 0;
                           break;
                   }
         }          }
         socurkva += len;          socurkva += len;
         simple_unlock(&so_pendfree_slock);          simple_unlock(&so_pendfree_slock);
         splx(s);          splx(s);
           return len;
 }  }
   
 static __inline void  static __inline void
Line 225  sokvaalloc(vsize_t len, struct socket *s
Line 232  sokvaalloc(vsize_t len, struct socket *s
          * reserve kva.           * reserve kva.
          */           */
   
         sokvareserve(so, len);          if (sokvareserve(so, len) == 0)
                   return 0;
   
         /*          /*
          * allocate kva.           * allocate kva.
Line 479  socreate(int dom, struct socket **aso, i
Line 487  socreate(int dom, struct socket **aso, i
 #endif  #endif
         if (p != 0)          if (p != 0)
                 so->so_uid = p->p_ucred->cr_uid;                  so->so_uid = p->p_ucred->cr_uid;
           else
                   so->so_uid = UID_MAX;
         error = (*prp->pr_usrreq)(so, PRU_ATTACH, (struct mbuf *)0,          error = (*prp->pr_usrreq)(so, PRU_ATTACH, (struct mbuf *)0,
             (struct mbuf *)(long)proto, (struct mbuf *)0, p);              (struct mbuf *)(long)proto, (struct mbuf *)0, p);
         if (error) {          if (error) {
Line 540  sofree(struct socket *so)
Line 550  sofree(struct socket *so)
                 if (!soqremque(so, 0))                  if (!soqremque(so, 0))
                         return;                          return;
         }          }
         sbrelease(&so->so_snd);          if (so->so_rcv.sb_hiwat)
                   (void)chgsbsize(so->so_uid, &so->so_rcv.sb_hiwat, 0,
                       RLIM_INFINITY);
           if (so->so_snd.sb_hiwat)
                   (void)chgsbsize(so->so_uid, &so->so_snd.sb_hiwat, 0,
                       RLIM_INFINITY);
           sbrelease(&so->so_snd, so);
         sorflush(so);          sorflush(so);
         pool_put(&socket_pool, so);          pool_put(&socket_pool, so);
 }  }
Line 1367  sorflush(struct socket *so)
Line 1383  sorflush(struct socket *so)
         splx(s);          splx(s);
         if (pr->pr_flags & PR_RIGHTS && pr->pr_domain->dom_dispose)          if (pr->pr_flags & PR_RIGHTS && pr->pr_domain->dom_dispose)
                 (*pr->pr_domain->dom_dispose)(asb.sb_mb);                  (*pr->pr_domain->dom_dispose)(asb.sb_mb);
         sbrelease(&asb);          sbrelease(&asb, so);
 }  }
   
 int  int
Line 1441  sosetopt(struct socket *so, int level, i
Line 1457  sosetopt(struct socket *so, int level, i
                         case SO_RCVBUF:                          case SO_RCVBUF:
                                 if (sbreserve(optname == SO_SNDBUF ?                                  if (sbreserve(optname == SO_SNDBUF ?
                                     &so->so_snd : &so->so_rcv,                                      &so->so_snd : &so->so_rcv,
                                     (u_long) optval) == 0) {                                      (u_long) optval, so) == 0) {
                                         error = ENOBUFS;                                          error = ENOBUFS;
                                         goto bad;                                          goto bad;
                                 }                                  }

Legend:
Removed from v.1.97  
changed lines
  Added in v.1.98

CVSweb <webmaster@jp.NetBSD.org>