浏览代码

handle messages which are newly doomed after an interruption

we already didn't propagate messages which would be instantly expunged
from the target, but failed to cancel propagations that were already
scheduled before we got interrupted. this matters a bit when the
resumption happens significantly later than the initial attempt, giving
the user time to mark messages on the source as deleted.
Oswald Buddenhagen 5 年之前
父节点
当前提交
ceb09fcd44
共有 1 个文件被更改,包括 7 次插入1 次删除
  1. 7 1
      src/sync.c

+ 7 - 1
src/sync.c

@@ -1593,7 +1593,13 @@ box_loaded( int sts, message_t *msgs, int total_msgs, int recent_msgs, void *aux
 			         : svars->newmaxuid[1-t] < tmsg->uid && (svars->chan->ops[t] & OP_NEW)) {
 				debug( "new message %u on %s\n", tmsg->uid, str_fn[1-t] );
 				if ((svars->chan->ops[t] & OP_EXPUNGE) && (tmsg->flags & F_DELETED)) {
-					debug( "-> ignoring - would be expunged anyway\n" );
+					if (srec) {
+						JLOG( "- %u %u", (srec->uid[F], srec->uid[N]), "killing - would be expunged anyway" );
+						tmsg->srec = NULL;
+						srec->status = S_DEAD;
+					} else {
+						debug( "-> ignoring - would be expunged anyway\n" );
+					}
 				} else {
 					if (srec) {
 						debug( "-> pair(%u,%u) exists\n", srec->uid[F], srec->uid[N] );