diff options
| -rw-r--r-- | sys/src/cmd/upas/fs/cache.c | 3 | ||||
| -rw-r--r-- | sys/src/cmd/upas/fs/mbox.c | 11 |
2 files changed, 9 insertions, 5 deletions
diff --git a/sys/src/cmd/upas/fs/cache.c b/sys/src/cmd/upas/fs/cache.c index 6620670fa..ab9b0d252 100644 --- a/sys/src/cmd/upas/fs/cache.c +++ b/sys/src/cmd/upas/fs/cache.c @@ -216,6 +216,9 @@ top: void cachehash(Mailbox *mb, Message *m) { + assert(mb->refs >= 0); + if(mb->refs == 0) + return; if(m->whole == m->whole->whole) henter(PATH(mb->id, Qmbox), m->name, (Qid){PATH(m->id, Qdir), 0, QTDIR}, m, mb); diff --git a/sys/src/cmd/upas/fs/mbox.c b/sys/src/cmd/upas/fs/mbox.c index a77996fd4..87e03d65f 100644 --- a/sys/src/cmd/upas/fs/mbox.c +++ b/sys/src/cmd/upas/fs/mbox.c @@ -115,14 +115,15 @@ syncmbox(Mailbox *mb, int doplumb) a = mb->root->subname - a; assert(a >= 0); if(n + d + y + a){ + Hash *h; + iprint("deleted: %d; new %d; stale %d\n", d, n, y); logmsg(nil, "deleted: %d; new %d; stale %d", d, n, y); wridxfile(mb); - } - if(n + d + y + a){ + mb->vers++; - henter(PATH(0, Qtop), mb->name, - (Qid){PATH(mb->id, Qmbox), mb->vers, QTDIR}, nil, mb); + if(mb->refs > 0 && (h = hlook(PATH(0, Qtop), mb->name)) != nil && h->mb == mb) + h->qid.vers = mb->vers; } mb->syncing = 0; @@ -166,8 +167,8 @@ mboxrename(char *a, char *b, int flags) strcat(f1, ".imp"); rename(f0, f1, 0); - snprint(mb->path, sizeof mb->path, "%s", b); hfree(PATH(0, Qtop), mb->name); + snprint(mb->path, sizeof mb->path, "%s", b); p0 = strrchr(mb->path, '/') + 1; if(p0 == (char*)1) p0 = mb->path; |
