fossil: move from liboventi to libthread and libventi
R=rsc https://codereview.appspot.com/13504049
This commit is contained in:
parent
6f4d00ee45
commit
4b57665805
38 changed files with 1360 additions and 1424 deletions
|
|
@ -3,7 +3,7 @@
|
|||
#include "9.h"
|
||||
|
||||
static struct {
|
||||
VtLock* lock;
|
||||
QLock lock;
|
||||
|
||||
Fid* free;
|
||||
int nfree;
|
||||
|
|
@ -14,11 +14,11 @@ static void
|
|||
fidLock(Fid* fid, int flags)
|
||||
{
|
||||
if(flags & FidFWlock){
|
||||
vtLock(fid->lock);
|
||||
wlock(&fid->lock);
|
||||
fid->flags = flags;
|
||||
}
|
||||
else
|
||||
vtRLock(fid->lock);
|
||||
rlock(&fid->lock);
|
||||
|
||||
/*
|
||||
* Callers of file* routines are expected to lock fsys->fs->elk
|
||||
|
|
@ -47,10 +47,10 @@ fidUnlock(Fid* fid)
|
|||
fsysFsRUnlock(fid->fsys);
|
||||
if(fid->flags & FidFWlock){
|
||||
fid->flags = 0;
|
||||
vtUnlock(fid->lock);
|
||||
wunlock(&fid->lock);
|
||||
return;
|
||||
}
|
||||
vtRUnlock(fid->lock);
|
||||
runlock(&fid->lock);
|
||||
}
|
||||
|
||||
static Fid*
|
||||
|
|
@ -58,19 +58,17 @@ fidAlloc(void)
|
|||
{
|
||||
Fid *fid;
|
||||
|
||||
vtLock(fbox.lock);
|
||||
qlock(&fbox.lock);
|
||||
if(fbox.nfree > 0){
|
||||
fid = fbox.free;
|
||||
fbox.free = fid->hash;
|
||||
fbox.nfree--;
|
||||
}
|
||||
else{
|
||||
fid = vtMemAllocZ(sizeof(Fid));
|
||||
fid->lock = vtLockAlloc();
|
||||
fid->alock = vtLockAlloc();
|
||||
fid = vtmallocz(sizeof(Fid));
|
||||
}
|
||||
fbox.inuse++;
|
||||
vtUnlock(fbox.lock);
|
||||
qunlock(&fbox.lock);
|
||||
|
||||
fid->con = nil;
|
||||
fid->fidno = NOFID;
|
||||
|
|
@ -105,11 +103,11 @@ fidFree(Fid* fid)
|
|||
fidUnlock(fid);
|
||||
|
||||
if(fid->uid != nil){
|
||||
vtMemFree(fid->uid);
|
||||
vtfree(fid->uid);
|
||||
fid->uid = nil;
|
||||
}
|
||||
if(fid->uname != nil){
|
||||
vtMemFree(fid->uname);
|
||||
vtfree(fid->uname);
|
||||
fid->uname = nil;
|
||||
}
|
||||
if(fid->excl != nil)
|
||||
|
|
@ -124,11 +122,11 @@ fidFree(Fid* fid)
|
|||
fid->fsys = nil;
|
||||
}
|
||||
if(fid->cuname != nil){
|
||||
vtMemFree(fid->cuname);
|
||||
vtfree(fid->cuname);
|
||||
fid->cuname = nil;
|
||||
}
|
||||
|
||||
vtLock(fbox.lock);
|
||||
qlock(&fbox.lock);
|
||||
fbox.inuse--;
|
||||
if(fbox.nfree < 10){
|
||||
fid->hash = fbox.free;
|
||||
|
|
@ -136,11 +134,9 @@ fidFree(Fid* fid)
|
|||
fbox.nfree++;
|
||||
}
|
||||
else{
|
||||
vtLockFree(fid->alock);
|
||||
vtLockFree(fid->lock);
|
||||
vtMemFree(fid);
|
||||
vtfree(fid);
|
||||
}
|
||||
vtUnlock(fbox.lock);
|
||||
qunlock(&fbox.lock);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -182,7 +178,7 @@ fidGet(Con* con, u32int fidno, int flags)
|
|||
return nil;
|
||||
|
||||
hash = &con->fidhash[fidno % NFidHash];
|
||||
vtLock(con->fidlock);
|
||||
qlock(&con->fidlock);
|
||||
for(fid = *hash; fid != nil; fid = fid->hash){
|
||||
if(fid->fidno != fidno)
|
||||
continue;
|
||||
|
|
@ -192,17 +188,17 @@ fidGet(Con* con, u32int fidno, int flags)
|
|||
* when called from attach, clone or walk.
|
||||
*/
|
||||
if(flags & FidFCreate){
|
||||
vtUnlock(con->fidlock);
|
||||
vtSetError("%s: fid 0x%ud in use", argv0, fidno);
|
||||
qunlock(&con->fidlock);
|
||||
werrstr("%s: fid 0x%ud in use", argv0, fidno);
|
||||
return nil;
|
||||
}
|
||||
fid->ref++;
|
||||
vtUnlock(con->fidlock);
|
||||
qunlock(&con->fidlock);
|
||||
|
||||
fidLock(fid, flags);
|
||||
if((fid->open & FidOCreate) || fid->fidno == NOFID){
|
||||
fidPut(fid);
|
||||
vtSetError("%s: fid invalid", argv0);
|
||||
werrstr("%s: fid invalid", argv0);
|
||||
return nil;
|
||||
}
|
||||
return fid;
|
||||
|
|
@ -228,7 +224,7 @@ fidGet(Con* con, u32int fidno, int flags)
|
|||
fid->next = nil;
|
||||
|
||||
con->nfid++;
|
||||
vtUnlock(con->fidlock);
|
||||
qunlock(&con->fidlock);
|
||||
|
||||
/*
|
||||
* The FidOCreate flag is used to prevent any
|
||||
|
|
@ -239,19 +235,19 @@ fidGet(Con* con, u32int fidno, int flags)
|
|||
fid->open &= ~FidOCreate;
|
||||
return fid;
|
||||
}
|
||||
vtUnlock(con->fidlock);
|
||||
qunlock(&con->fidlock);
|
||||
|
||||
vtSetError("%s: fid not found", argv0);
|
||||
werrstr("%s: fid not found", argv0);
|
||||
return nil;
|
||||
}
|
||||
|
||||
void
|
||||
fidPut(Fid* fid)
|
||||
{
|
||||
vtLock(fid->con->fidlock);
|
||||
qlock(&fid->con->fidlock);
|
||||
assert(fid->ref > 0);
|
||||
fid->ref--;
|
||||
vtUnlock(fid->con->fidlock);
|
||||
qunlock(&fid->con->fidlock);
|
||||
|
||||
if(fid->ref == 0 && fid->fidno == NOFID){
|
||||
fidFree(fid);
|
||||
|
|
@ -265,12 +261,12 @@ fidClunk(Fid* fid)
|
|||
{
|
||||
assert(fid->flags & FidFWlock);
|
||||
|
||||
vtLock(fid->con->fidlock);
|
||||
qlock(&fid->con->fidlock);
|
||||
assert(fid->ref > 0);
|
||||
fid->ref--;
|
||||
fidUnHash(fid);
|
||||
fid->fidno = NOFID;
|
||||
vtUnlock(fid->con->fidlock);
|
||||
qunlock(&fid->con->fidlock);
|
||||
|
||||
if(fid->ref > 0){
|
||||
/* not reached - fidUnHash requires ref == 0 */
|
||||
|
|
@ -286,19 +282,18 @@ fidClunkAll(Con* con)
|
|||
Fid *fid;
|
||||
u32int fidno;
|
||||
|
||||
vtLock(con->fidlock);
|
||||
qlock(&con->fidlock);
|
||||
while(con->fhead != nil){
|
||||
fidno = con->fhead->fidno;
|
||||
vtUnlock(con->fidlock);
|
||||
qunlock(&con->fidlock);
|
||||
if((fid = fidGet(con, fidno, FidFWlock)) != nil)
|
||||
fidClunk(fid);
|
||||
vtLock(con->fidlock);
|
||||
qlock(&con->fidlock);
|
||||
}
|
||||
vtUnlock(con->fidlock);
|
||||
qunlock(&con->fidlock);
|
||||
}
|
||||
|
||||
void
|
||||
fidInit(void)
|
||||
{
|
||||
fbox.lock = vtLockAlloc();
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue