upas/fs: fix sync condition
we used to check for mb->d->name != nil before stating, to avoid stating pop3/imap mailboxes who don't really have a local file, but this breaks when the md->d is reconstructed (faked) from the index! resulting in the mailbox stop being refreshed. the solution is to not have mb->d == nil for imap/pop mailoxes.
This commit is contained in:
parent
35f6a75355
commit
1d94a18e56
3 changed files with 11 additions and 18 deletions
|
@ -879,7 +879,7 @@ retry:
|
|||
if(Topmsg(f->mb, f->m)){
|
||||
f->qid.path = PATH(f->mb->id, Qmbox);
|
||||
f->qid.type = QTDIR;
|
||||
f->qid.vers = f->mb->d->qid.vers;
|
||||
f->qid.vers = f->mb->vers;
|
||||
msgdecref(f->mb, f->mtop);
|
||||
msgdecref(f->mb, f->m);
|
||||
f->m = f->mtop = nil;
|
||||
|
@ -1462,7 +1462,7 @@ reader(void)
|
|||
mb->waketime = 0;
|
||||
break;
|
||||
}
|
||||
if(mb->d != nil && mb->d->name != nil){
|
||||
if(mb->d != nil){
|
||||
d = dirstat(mb->path);
|
||||
if(d != nil){
|
||||
if(d->qid.path != mb->d->qid.path
|
||||
|
|
|
@ -39,7 +39,7 @@ typedef struct {
|
|||
|
||||
typedef struct Imap Imap;
|
||||
struct Imap {
|
||||
long lastread;
|
||||
ulong lastread;
|
||||
|
||||
char *mbox;
|
||||
/* free this to free the strings below */
|
||||
|
@ -913,7 +913,7 @@ imap4read(Imap *imap, Mailbox *mb, int doplumb, int *new)
|
|||
Message *m, **ll;
|
||||
|
||||
*new = 0;
|
||||
if(time(0) - imap->lastread < 10)
|
||||
if((ulong)time(0) - imap->lastread < 10)
|
||||
return nil;
|
||||
imap->lastread = time(0);
|
||||
imap4cmd(imap, "status %Z (messages uidvalidity)", imap->mbox);
|
||||
|
@ -1008,10 +1008,9 @@ imap4sync(Mailbox *mb, int doplumb, int *new)
|
|||
imap = mb->aux;
|
||||
if(err = imap4dial(imap))
|
||||
goto out;
|
||||
if((err = imap4read(imap, mb, doplumb, new)) == nil)
|
||||
mb->d->atime = mb->d->mtime = time(0);
|
||||
err = imap4read(imap, mb, doplumb, new);
|
||||
out:
|
||||
mb->waketime = time(0) + imap->refreshtime;
|
||||
mb->waketime = (ulong)time(0) + imap->refreshtime;
|
||||
return err;
|
||||
}
|
||||
|
||||
|
@ -1185,7 +1184,6 @@ imap4mbox(Mailbox *mb, char *path)
|
|||
mb->rename = imap4rename;
|
||||
// mb->remove = imap4remove;
|
||||
mb->modflags = imap4modflags;
|
||||
mb->d = emalloc(sizeof *mb->d);
|
||||
mb->addfrom = 1;
|
||||
return nil;
|
||||
}
|
||||
|
|
|
@ -539,17 +539,13 @@ pop3sync(Mailbox *mb, int doplumb, int *new)
|
|||
|
||||
pop = mb->aux;
|
||||
|
||||
if(err = pop3dial(pop)) {
|
||||
mb->waketime = time(0) + pop->refreshtime;
|
||||
return err;
|
||||
}
|
||||
|
||||
if((err = pop3read(pop, mb, doplumb, new)) == nil){
|
||||
if(err = pop3dial(pop))
|
||||
goto out;
|
||||
if((err = pop3read(pop, mb, doplumb, new)) == nil)
|
||||
pop3purge(pop, mb);
|
||||
mb->d->atime = mb->d->mtime = time(0);
|
||||
}
|
||||
pop3hangup(pop);
|
||||
mb->waketime = time(0) + pop->refreshtime;
|
||||
out:
|
||||
mb->waketime = (ulong)time(0) + pop->refreshtime;
|
||||
return err;
|
||||
}
|
||||
|
||||
|
@ -661,7 +657,6 @@ pop3mbox(Mailbox *mb, char *path)
|
|||
mb->sync = pop3sync;
|
||||
mb->close = pop3close;
|
||||
mb->ctl = pop3ctl;
|
||||
mb->d = emalloc(sizeof *mb->d);
|
||||
mb->addfrom = 1;
|
||||
return nil;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue