Xref: utzoo comp.unix.questions:6943 comp.unix.wizards:8357 Path: utzoo!mnetor!uunet!husc6!cmcl2!brl-adm!umd5!mimsy!chris From: chris@mimsy.UUCP (Chris Torek) Newsgroups: comp.unix.questions,comp.unix.wizards Subject: Re: Help with SLIP Message-ID: <11434@mimsy.UUCP> Date: 10 May 88 20:02:15 GMT References: <614@sunspot.UUCP> Organization: U of Maryland, Dept. of Computer Science, Coll. Pk., MD 20742 Lines: 100 Keywords: SLIP hangs Try the following patch on the 4.3BSD Vax. Mike's CLISTRESERVE and my SC_OACTIVE code clashed, so I simplified mine. RCS file: RCS/if_sl.c,v retrieving revision 1.1 retrieving revision 1.2 diff -c2 -r1.1 -r1.2 *** /tmp/,RCSt1012706 Tue May 10 16:01:26 1988 --- /tmp/,RCSt2012706 Tue May 10 16:01:30 1988 *************** *** 21,25 **** */ ! /* $Header: if_sl.c,v 1.1 87/04/05 08:59:39 chris Exp $ */ /* from if_sl.c,v 1.11 84/10/04 12:54:47 rick Exp */ --- 21,25 ---- */ ! /* $Header: if_sl.c,v 1.2 87/09/03 09:47:01 chris Exp $ */ /* from if_sl.c,v 1.11 84/10/04 12:54:47 rick Exp */ *************** *** 70,74 **** /* flags */ #define SC_ESCAPED 0x0001 /* saw a FRAME_ESCAPE */ - #define SC_OACTIVE 0x0002 /* output tty is active */ #define FRAME_END 0300 /* Frame End */ --- 70,73 ---- *************** *** 215,219 **** } IF_ENQUEUE(&ifp->if_snd, m); ! if ((sc->sc_flags & SC_OACTIVE) == 0) { splx(s); slstart(sc->sc_ttyp); --- 214,218 ---- } IF_ENQUEUE(&ifp->if_snd, m); ! if (sc->sc_ttyp->t_outq.c_cc == 0) { splx(s); slstart(sc->sc_ttyp); *************** *** 235,239 **** register int len; register u_char *cp; ! int flush, nd, np, n, s; struct mbuf *m2; extern int cfreecount; --- 234,238 ---- register int len; register u_char *cp; ! int nd, np, n, s; struct mbuf *m2; extern int cfreecount; *************** *** 260,265 **** * and we have something running already, stop here. */ ! if (cfreecount < CLISTRESERVE + SLMTU && ! sc->sc_flags & SC_OACTIVE) return; --- 259,263 ---- * and we have something running already, stop here. */ ! if (cfreecount < CLISTRESERVE + SLMTU && tp->t_outq.c_cc > 0) return; *************** *** 270,280 **** IF_DEQUEUE(&sc->sc_if.if_snd, m); if (m == NULL) { - if (tp->t_outq.c_cc == 0) - sc->sc_flags &= ~SC_OACTIVE; splx(s); return; } - flush = !(sc->sc_flags & SC_OACTIVE); - sc->sc_flags |= SC_OACTIVE; splx(s); --- 268,274 ---- *************** *** 284,288 **** * the line may have been idle for some time. */ ! if (flush) (void) putc(FRAME_END, &tp->t_outq); --- 278,282 ---- * the line may have been idle for some time. */ ! if (tp->t_outq.c_cc == 0) /* atomic */ (void) putc(FRAME_END, &tp->t_outq); -- In-Real-Life: Chris Torek, Univ of MD Comp Sci Dept (+1 301 454 7163) Domain: chris@mimsy.umd.edu Path: uunet!mimsy!chris