#include #include #include #include "queue.h" VtConn* vtconn(int infd, int outfd) { VtConn *z; z = vtmallocz(sizeof(VtConn)); z->tagrend.l = &z->lk; z->rpcfork.l = &z->lk; z->infd = infd; z->outfd = outfd; z->part = packetalloc(); return z; } void vtfreeconn(VtConn *z) { vthangup(z); qlock(&z->lk); for(;;){ if(z->readq) _vtqhangup(z->readq); else if(z->writeq) _vtqhangup(z->writeq); else break; rsleep(&z->rpcfork); } packetfree(z->part); vtfree(z); }