X-Git-Url: https://git.ozlabs.org/?a=blobdiff_plain;ds=sidebyside;f=modules%2Fppp_ahdlc.c;h=6d0ef485da9fd0af456131f010a76046a0e0ad8c;hb=9786230ddaa4428a4f2ad50be94bb288772a3d49;hp=c1853bbb9e437cd4be3e7f99109864a9582307c8;hpb=4fdc878315fc1752f4cf53b3352f27f09e2b6bcb;p=ppp.git diff --git a/modules/ppp_ahdlc.c b/modules/ppp_ahdlc.c index c1853bb..6d0ef48 100644 --- a/modules/ppp_ahdlc.c +++ b/modules/ppp_ahdlc.c @@ -24,7 +24,7 @@ * OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, * OR MODIFICATIONS. * - * $Id: ppp_ahdlc.c,v 1.7 1998/03/24 23:52:35 paulus Exp $ + * $Id: ppp_ahdlc.c,v 1.10 1999/04/12 06:20:21 paulus Exp $ */ /* @@ -190,6 +190,8 @@ MOD_CLOSE(ahdlc_close) state->cur_frame = 0; } FREE(q->q_ptr, sizeof(ahdlc_state_t)); + q->q_ptr = NULL; + OTHERQ(q)->q_ptr = NULL; --ppp_ahdlc_count; } return 0; @@ -207,6 +209,12 @@ ahdlc_wput(q, mp) struct ppp_stats *psp; state = (ahdlc_state_t *) q->q_ptr; + if (state == 0) { + DPRINT("state == 0 in ahdlc_wput\n"); + freemsg(mp); + return 0; + } + switch (mp->b_datap->db_type) { case M_DATA: /* @@ -326,6 +334,7 @@ ahdlc_wput(q, mp) default: putnext(q, mp); } + return 0; } @@ -338,6 +347,13 @@ ahdlc_rput(q, mp) uchar_t *cp; ahdlc_state_t *state; + state = (ahdlc_state_t *) q->q_ptr; + if (state == 0) { + DPRINT("state == 0 in ahdlc_rput\n"); + freemsg(mp); + return 0; + } + switch (mp->b_datap->db_type) { case M_DATA: unstuff_chars(q, mp); @@ -345,7 +361,6 @@ ahdlc_rput(q, mp) break; case M_HANGUP: - state = (ahdlc_state_t *) q->q_ptr; if (state->cur_frame != 0) { /* XXX would like to send this up for debugging */ freemsg(state->cur_frame); @@ -395,12 +410,14 @@ stuff_frame(q, mp) goto bomb; /* - * Put in an initial flag for now. We'll remove it later - * if we decide we don't need it. + * Put in an initial flag, unless the serial driver currently has + * packets still to be transmitted in its queue. */ dp = op->b_wptr; - *dp++ = PPP_FLAG; - --olen; + if (qsize(q->q_next) == 0) { + *dp++ = PPP_FLAG; + --olen; + } /* * For LCP packets with code values between 1 and 7 (Conf-Req @@ -512,12 +529,6 @@ stuff_frame(q, mp) *dp++ = PPP_FLAG; op->b_wptr = dp; - /* - * Remove the initial flag, if possible. - */ - if (qsize(q->q_next) > 0) - ++omsg->b_rptr; - /* * Update statistics. */