Blame


1 056fe1ba 2003-11-23 devnull #include <u.h>
2 056fe1ba 2003-11-23 devnull #include <libc.h>
3 056fe1ba 2003-11-23 devnull #include <venti.h>
4 056fe1ba 2003-11-23 devnull #include "queue.h"
5 056fe1ba 2003-11-23 devnull
6 056fe1ba 2003-11-23 devnull VtConn*
7 056fe1ba 2003-11-23 devnull vtconn(int infd, int outfd)
8 056fe1ba 2003-11-23 devnull {
9 056fe1ba 2003-11-23 devnull VtConn *z;
10 056fe1ba 2003-11-23 devnull
11 056fe1ba 2003-11-23 devnull z = vtmallocz(sizeof(VtConn));
12 056fe1ba 2003-11-23 devnull z->tagrend.l = &z->lk;
13 056fe1ba 2003-11-23 devnull z->rpcfork.l = &z->lk;
14 056fe1ba 2003-11-23 devnull z->infd = infd;
15 056fe1ba 2003-11-23 devnull z->outfd = outfd;
16 056fe1ba 2003-11-23 devnull z->part = packetalloc();
17 056fe1ba 2003-11-23 devnull return z;
18 056fe1ba 2003-11-23 devnull }
19 056fe1ba 2003-11-23 devnull
20 056fe1ba 2003-11-23 devnull void
21 056fe1ba 2003-11-23 devnull vtfreeconn(VtConn *z)
22 056fe1ba 2003-11-23 devnull {
23 056fe1ba 2003-11-23 devnull vthangup(z);
24 056fe1ba 2003-11-23 devnull qlock(&z->lk);
25 056fe1ba 2003-11-23 devnull for(;;){
26 056fe1ba 2003-11-23 devnull if(z->readq)
27 056fe1ba 2003-11-23 devnull _vtqhangup(z->readq);
28 056fe1ba 2003-11-23 devnull else if(z->writeq)
29 056fe1ba 2003-11-23 devnull _vtqhangup(z->writeq);
30 056fe1ba 2003-11-23 devnull else
31 056fe1ba 2003-11-23 devnull break;
32 056fe1ba 2003-11-23 devnull rsleep(&z->rpcfork);
33 056fe1ba 2003-11-23 devnull }
34 056fe1ba 2003-11-23 devnull packetfree(z->part);
35 056fe1ba 2003-11-23 devnull vtfree(z);
36 056fe1ba 2003-11-23 devnull }