summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/src/cmd/upas/fs/cache.c18
-rw-r--r--sys/src/cmd/upas/fs/dat.h2
-rw-r--r--sys/src/cmd/upas/fs/mbox.c2
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);