diff options
| -rw-r--r-- | sys/src/cmd/upas/fs/cache.c | 8 | ||||
| -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, 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); |
