summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/src/cmd/upas/fs/cache.c8
-rw-r--r--sys/src/cmd/upas/fs/dat.h2
-rw-r--r--sys/src/cmd/upas/fs/mbox.c2
3 files changed, 7 insertions, 5 deletions
diff --git a/sys/src/cmd/upas/fs/cache.c b/sys/src/cmd/upas/fs/cache.c
index 8fe7f3dde..f7442e80c 100644
--- a/sys/src/cmd/upas/fs/cache.c
+++ b/sys/src/cmd/upas/fs/cache.c
@@ -35,7 +35,7 @@ notecache(Mailbox *mb, Message *m, long sz)
}
void
-cachefree(Mailbox *mb, Message *m)
+cachefree(Mailbox *mb, Message *m, int force)
{
long i;
Message *s, **ll;
@@ -54,7 +54,9 @@ cachefree(Mailbox *mb, Message *m)
mb->cached -= m->csize;
}
for(s = m->part; s; s = s->next)
- cachefree(mb, s);
+ cachefree(mb, s, force);
+ if(!force && mb->fetch == nil)
+ return;
if(m->mallocd){
free(m->start);
m->mallocd = 0;
@@ -101,7 +103,7 @@ putcache(Mailbox *mb, Message *m)
return;
addlru(mb, mb->lru);
}
- cachefree(mb, mb->lru);
+ cachefree(mb, mb->lru, 0);
}
}
diff --git a/sys/src/cmd/upas/fs/dat.h b/sys/src/cmd/upas/fs/dat.h
index d25656b0c..67f11bb98 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*);
+void cachefree(Mailbox*, Message*, int);
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 b83014ec0..044c4b091 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);
+ cachefree(mb, m, 1);
idxfree(m);
}
free(m->unixfrom);