X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;ds=sidebyside;f=modules%2Fppp_comp.c;h=87d0c1d37382e49f8db51621b57b462190aa5bb8;hb=d4777d66024a8c343ad420f1d45ed2cbaa7468bc;hp=c4ed83e50343c7500a32ad82d0afbfca38e83638;hpb=4fdc878315fc1752f4cf53b3352f27f09e2b6bcb;p=ppp.git diff --git a/modules/ppp_comp.c b/modules/ppp_comp.c index c4ed83e..87d0c1d 100644 --- a/modules/ppp_comp.c +++ b/modules/ppp_comp.c @@ -24,7 +24,7 @@ * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, * OR MODIFICATIONS. * - * $Id: ppp_comp.c,v 1.9 1998/03/24 23:52:37 paulus Exp $ + * $Id: ppp_comp.c,v 1.13 2002/09/07 05:15:25 carlsonj Exp $ */ /* @@ -190,20 +190,20 @@ MOD_OPEN(ppp_comp_open) cp = (comp_state_t *) ALLOC_SLEEP(sizeof(comp_state_t)); if (cp == NULL) OPEN_ERROR(ENOSR); - WR(q)->q_ptr = q->q_ptr = (caddr_t) cp; bzero((caddr_t)cp, sizeof(comp_state_t)); + WR(q)->q_ptr = q->q_ptr = (caddr_t) cp; cp->mru = PPP_MRU; cp->mtu = PPP_MTU; cp->xstate = NULL; cp->rstate = NULL; vj_compress_init(&cp->vj_comp, -1); - ++ppp_comp_count; - qprocson(q); #ifdef __osf__ if (!(thread = kernel_thread_w_arg(first_task, ppp_comp_alloc, (void *)cp))) OPEN_ERROR(ENOSR); cp->thread = thread; #endif + ++ppp_comp_count; + qprocson(q); } return 0; } @@ -326,6 +326,12 @@ ppp_comp_wput(q, mp) int nxslots, nrslots; cp = (comp_state_t *) q->q_ptr; + if (cp == 0) { + DPRINT("cp == 0 in ppp_comp_wput\n"); + freemsg(mp); + return 0; + } + switch (mp->b_datap->db_type) { case M_DATA: @@ -584,28 +590,36 @@ ppp_comp_wput(q, mp) default: putnext(q, mp); } + + return 0; } static int ppp_comp_wsrv(q) queue_t *q; { - mblk_t *mp, *cmp = NULL, *np; + mblk_t *mp, *cmp = NULL; comp_state_t *cp; int len, proto, type, hlen, code; struct ip *ip; unsigned char *vjhdr, *dp; cp = (comp_state_t *) q->q_ptr; + if (cp == 0) { + DPRINT("cp == 0 in ppp_comp_wsrv\n"); + return 0; + } + while ((mp = getq(q)) != 0) { /* assert(mp->b_datap->db_type == M_DATA) */ #ifdef PRIOQ - if (!bcanputnext(q,mp->b_band)) { + if (!bcanputnext(q,mp->b_band)) #else - if (!canputnext(q)) { -#endif PRIOQ + if (!canputnext(q)) +#endif /* PRIOQ */ + { putbq(q, mp); - return; + break; } /* @@ -680,7 +694,7 @@ ppp_comp_wsrv(q) if (cmp != NULL) { #ifdef PRIOQ cmp->b_band=mp->b_band; -#endif PRIOQ +#endif /* PRIOQ */ freemsg(mp); mp = cmp; } @@ -705,6 +719,8 @@ ppp_comp_wsrv(q) cp->stats.ppp_obytes += msgdsize(mp); putnext(q, mp); } + + return 0; } static int @@ -717,6 +733,12 @@ ppp_comp_rput(q, mp) struct ppp_stats *psp; cp = (comp_state_t *) q->q_ptr; + if (cp == 0) { + DPRINT("cp == 0 in ppp_comp_rput\n"); + freemsg(mp); + return 0; + } + switch (mp->b_datap->db_type) { case M_DATA: @@ -755,6 +777,8 @@ ppp_comp_rput(q, mp) default: putnext(q, mp); } + + return 0; } static int @@ -769,11 +793,16 @@ ppp_comp_rsrv(q) u_int iphlen; cp = (comp_state_t *) q->q_ptr; + if (cp == 0) { + DPRINT("cp == 0 in ppp_comp_rsrv\n"); + return 0; + } + while ((mp = getq(q)) != 0) { /* assert(mp->b_datap->db_type == M_DATA) */ if (!canputnext(q)) { putbq(q, mp); - return; + break; } len = msgdsize(mp); @@ -995,6 +1024,8 @@ ppp_comp_rsrv(q) cp->stats.ppp_ierrors++; putctl1(q->q_next, M_CTL, PPPCTL_IERROR); } + + return 0; } /*