add -W to specify window size.

various other little fixes.
This commit is contained in:
rsc 2004-04-29 17:13:24 +00:00
parent 3d72637f9b
commit be36ff6885
36 changed files with 332 additions and 304 deletions

View file

@ -13,6 +13,8 @@ typedef struct VtSconn VtSconn;
struct VtSconn
{
int ctl;
int ref;
QLock lk;
char dir[NETPATHLEN];
VtSrv *srv;
VtConn *c;
@ -29,6 +31,27 @@ struct VtSrv
static void listenproc(void*);
static void connproc(void*);
static void
scincref(VtSconn *sc)
{
qlock(&sc->lk);
sc->ref++;
qunlock(&sc->lk);
}
static void
scdecref(VtSconn *sc)
{
qlock(&sc->lk);
if(--sc->ref > 0){
qunlock(&sc->lk);
return;
}
if(sc->c)
vtfreeconn(sc->c);
vtfree(sc);
}
VtSrv*
vtlisten(char *addr)
{
@ -55,14 +78,13 @@ listenproc(void *v)
srv = v;
for(;;){
fprint(2, "listen for venti\n");
ctl = listen(srv->adir, dir);
if(ctl < 0){
srv->dead = 1;
break;
}
fprint(2, "got one\n");
sc = vtmallocz(sizeof(VtSconn));
sc->ref = 1;
sc->ctl = ctl;
sc->srv = srv;
strcpy(sc->dir, dir);
@ -82,8 +104,8 @@ connproc(void *v)
int fd;
r = nil;
c = nil;
sc = v;
sc->c = nil;
fprint(2, "new call %s on %d\n", sc->dir, sc->ctl);
fd = accept(sc->ctl, sc->dir);
close(sc->ctl);
@ -122,7 +144,9 @@ connproc(void *v)
break;
r->rx.tag = r->tx.tag;
r->sc = sc;
scincref(sc);
if(_vtqsend(sc->srv->q, r) < 0){
scdecref(sc);
fprint(2, "hungup queue\n");
break;
}
@ -136,10 +160,8 @@ out:
vtfcallclear(&r->tx);
vtfree(r);
}
if(c)
vtfreeconn(c);
fprint(2, "freed %s\n", sc->dir);
vtfree(sc);
scdecref(sc);
return;
}
@ -167,6 +189,7 @@ vtrespond(VtReq *r)
return;
}
vtsend(sc->c, p);
scdecref(sc);
vtfcallclear(&r->tx);
vtfcallclear(&r->rx);
vtfree(r);