#include #include #include #include "queue.h" int chattyventi; VtConn* vtconn(int infd, int outfd) { VtConn *z; NetConnInfo *nci; z = vtmallocz(sizeof(VtConn)); z->tagrend.l = &z->lk; z->rpcfork.l = &z->lk; z->infd = infd; z->outfd = outfd; z->part = packetalloc(); nci = getnetconninfo(nil, infd); if(nci == nil) snprint(z->addr, sizeof z->addr, "/dev/fd/%d", infd); else{ strecpy(z->addr, z->addr+sizeof z->addr, nci->raddr); freenetconninfo(nci); } 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); }