| plan 9 kernel history: overview | file list | diff list |
1990/0509/port/sturp.c (diff list | history)
| 1990/0509/sys/src/9/port/sturp.c:48,54 – 1990/0511/sys/src/9/port/sturp.c:48,53 (short | long | prev | next) | ||
| 1990/0321 | int blocks; | |
| 1990/0227 | /* output */ | |
| 1990/0312 | QLock xmit; /* output lock, only one process at a time */ Queue *wq; /* output queue */ int maxout; /* maximum outstanding unacked blocks */ | |
| 1990/0509/sys/src/9/port/sturp.c:60,65 – 1990/0511/sys/src/9/port/sturp.c:59,65 | ||
| 1990/0227 | Block *xb[8]; /* the xmit window buffer */ | |
| 1990/0312 | QLock xl[8]; ulong timer; /* timeout for xmit */ | |
| 1990/0511 | int rexmit; | |
| 1990/0312 | int kstarted; | |
| 1990/0227 | }; | |
| 1990/0509/sys/src/9/port/sturp.c:168,181 – 1990/0511/sys/src/9/port/sturp.c:168,173 | ||
| 1990/0227 | up = (Urp *)a; | |
| 1990/0509 | return (up->state&HUNGUP) || (up->unechoed==up->nxb && up->wq->len==0); | |
| 1990/0227 | } | |
| 1990/0312 |
| |
| 1990/0227 | urpclose(Queue *q) { | |
| 1990/0509/sys/src/9/port/sturp.c:219,226 – 1990/0511/sys/src/9/port/sturp.c:211,220 | ||
| 1990/0509 | } qunlock(&up->xmit); | |
| 1990/0403 |
| |
| 1990/0511 | if(up->kstarted == 0){ DPRINT("urpclose %ux\n", up); | |
| 1990/0403 | up->state = 0; | |
| 1990/0511 | } | |
| 1990/0227 | } /* | |
| 1990/0509/sys/src/9/port/sturp.c:471,476 – 1990/0511/sys/src/9/port/sturp.c:465,474 | ||
| 1990/0227 | urpstat.rjseq++; | |
| 1990/0321 | sendrej(up); | |
| 1990/0227 | break; | |
| 1990/0511 | } else if(q->next->len > (3*Streamhi)/2 || q->next->nb > (3*Streambhi)/2) { flushinput(up); break; | |
| 1990/0227 | } /* | |
| 1990/0509/sys/src/9/port/sturp.c:559,564 – 1990/0511/sys/src/9/port/sturp.c:557,563 | ||
| 1990/0312 | ulong now; Queue *q; int n; | |
| 1990/0511 | int i; | |
| 1990/0227 | ||
| 1990/0312 | if(!canqlock(&up->xmit)) return; | |
| 1990/0509/sys/src/9/port/sturp.c:607,614 – 1990/0511/sys/src/9/port/sturp.c:606,612 | ||
| 1990/0312 | /* * if a retransmit time has elapsed since a transmit, send an ENQ */ | |
| 1990/0321 |
| |
| 1990/0511 | if(up->unechoed!=up->next && NOW>up->timer){ | |
| 1990/0312 | up->timer = NOW + MSrexmit; up->state &= ~REJECTING; sendctl(up, ENQ); | |
| 1990/0509/sys/src/9/port/sturp.c:620,630 – 1990/0511/sys/src/9/port/sturp.c:618,638 | ||
| 1990/0312 | /* * if there's a window open, push some blocks out */ | |
| 1990/0511 | if(up->rexmit){ up->rexmit = 0; up->next = up->unechoed; } while(WINDOW(up)>0 && up->xb[up->next]!=0){ i = up->next; qlock(&up->xl[i]); if(waserror()){ qunlock(&up->xl[i]); nexterror(); } sendblock(up, i); qunlock(&up->xl[i]); | |
| 1990/0312 | up->next = NEXT(up->next); | |
| 1990/0511 | poperror(); | |
| 1990/0312 | } qunlock(&up->xmit); poperror(); | |
| 1990/0509/sys/src/9/port/sturp.c:745,750 – 1990/0511/sys/src/9/port/sturp.c:753,759 | ||
| 1990/0227 | { int seqno; int next; | |
| 1990/0511 | int i; | |
| 1990/0227 | ||
| 1990/0312 | seqno = msg&Nmask; next = NEXT(seqno); | |
| 1990/0509/sys/src/9/port/sturp.c:754,764 – 1990/0511/sys/src/9/port/sturp.c:763,774 | ||
| 1990/0312 | */ if(IN(seqno, up->unacked, up->next)){ for(; up->unacked != next; up->unacked = NEXT(up->unacked)){ | |
| 1990/0511 | i = up->unacked; qlock(&up->xl[i]); if(up->xb[i]) freeb(up->xb[i]); up->xb[i] = 0; qunlock(&up->xl[i]); | |
| 1990/0312 | } } | |
| 1990/0227 | ||
| 1990/0509/sys/src/9/port/sturp.c:786,792 – 1990/0511/sys/src/9/port/sturp.c:796,802 | ||
| 1990/0312 | */ if(up->unechoed==next && !(up->state & REJECTING)){ up->state |= REJECTING; | |
| 1990/0511 | up->rexmit = 1; | |
| 1990/0227 | } break; } | |
| 1990/0509/sys/src/9/port/sturp.c:831,836 – 1990/0511/sys/src/9/port/sturp.c:841,847 | ||
| 1990/0312 | up->unacked = 1; up->next = 1; up->nxb = 1; | |
| 1990/0511 | up->rexmit = 0; | |
| 1990/0227 | /* | |
| 1990/0312 | * free any outstanding blocks | |
| 1990/0509/sys/src/9/port/sturp.c:886,891 – 1990/0511/sys/src/9/port/sturp.c:897,903 | ||
| 1990/0312 | up = (Urp *)arg; | |
| 1990/0403 | if(waserror()){ | |
| 1990/0511 | print("urpkproc error %ux\n", up); | |
| 1990/0403 | up->state = 0; up->kstarted = 0; wakeup(&up->r); | |
| 1990/0509/sys/src/9/port/sturp.c:898,907 – 1990/0511/sys/src/9/port/sturp.c:910,925 | ||
| 1990/0312 | if(up->state & HUNGUP) break; } | |
| 1990/0321 |
| |
| 1990/0511 | if(up->state == 0){ DPRINT("urpkproc: %ux->state == 0\n", up); break; } if(!QFULL(up->rq->next)) sendack(up); | |
| 1990/0312 | output(up); tsleep(&up->rq->r, todo, up, MSrexmit/2); } up->state = 0; | |
| 1990/0403 | up->kstarted = 0; | |
| 1990/0511 | DPRINT("urpkproc %ux\n", up); | |
| 1990/0227 | } | |