diff options
| -rw-r--r-- | sys/src/cmd/upas/fs/cache.c | 18 | ||||
| -rw-r--r-- | sys/src/cmd/upas/fs/dat.h | 2 | ||||
| -rw-r--r-- | sys/src/cmd/upas/fs/mbox.c | 2 |
3 files changed, 12 insertions, 10 deletions
diff --git a/sys/src/cmd/upas/fs/cache.c b/sys/src/cmd/upas/fs/cache.c index f7442e80c..5312886b3 100644 --- a/sys/src/cmd/upas/fs/cache.c +++ b/sys/src/cmd/upas/fs/cache.c @@ -3,13 +3,15 @@ #include "dat.h" static void -addlru(Mcache *c, Message *m) +addlru(Mailbox *c, Message *m) { Message *l, **ll; if((m->cstate & (Cheader|Cbody)) == 0) return; + assert(c->fetch != nil); + c->nlru++; ll = &c->lru; while((l = *ll) != nil){ @@ -35,12 +37,12 @@ notecache(Mailbox *mb, Message *m, long sz) } void -cachefree(Mailbox *mb, Message *m, int force) +cachefree(Mailbox *mb, Message *m) { long i; Message *s, **ll; - if(Topmsg(mb, m)){ + if(Topmsg(mb, m) && mb->fetch != nil){ for(ll = &mb->lru; *ll != nil; ll = &((*ll)->lru)){ if(*ll == m){ mb->nlru--; @@ -49,14 +51,12 @@ cachefree(Mailbox *mb, Message *m, int force) break; } } - if(mb->decache) + if(mb->decache != nil) mb->decache(mb, m); mb->cached -= m->csize; } for(s = m->part; s; s = s->next) - cachefree(mb, s, force); - if(!force && mb->fetch == nil) - return; + cachefree(mb, s); if(m->mallocd){ free(m->start); m->mallocd = 0; @@ -94,6 +94,8 @@ putcache(Mailbox *mb, Message *m) { int n; + if(mb->fetch == nil) + return; while(!Topmsg(mb, m)) m = m->whole; addlru(mb, m); while(mb->lru != nil && (mb->cached > cachetarg || mb->nlru > 10)){ @@ -103,7 +105,7 @@ putcache(Mailbox *mb, Message *m) return; addlru(mb, mb->lru); } - cachefree(mb, mb->lru, 0); + cachefree(mb, mb->lru); } } diff --git a/sys/src/cmd/upas/fs/dat.h b/sys/src/cmd/upas/fs/dat.h index 67f11bb98..d25656b0c 100644 --- a/sys/src/cmd/upas/fs/dat.h +++ b/sys/src/cmd/upas/fs/dat.h @@ -207,7 +207,7 @@ int insurecache(Mailbox*, Message*); /**/ void putcache(Mailbox*, Message*); /* asymmetricial */ -void cachefree(Mailbox*, Message*, int); +void cachefree(Mailbox*, Message*); char* syncmbox(Mailbox*, int); void* emalloc(ulong); diff --git a/sys/src/cmd/upas/fs/mbox.c b/sys/src/cmd/upas/fs/mbox.c index 044c4b091..b83014ec0 100644 --- a/sys/src/cmd/upas/fs/mbox.c +++ b/sys/src/cmd/upas/fs/mbox.c @@ -1041,7 +1041,7 @@ delmessage(Mailbox *mb, Message *m) if(Topmsg(mb, m)) mtreedelete(mb, m); - cachefree(mb, m, 1); + cachefree(mb, m); idxfree(m); } free(m->unixfrom); |
