diff --git a/src/run-tests.pl b/src/run-tests.pl index 5cc1938..4e37a3e 100755 --- a/src/run-tests.pl +++ b/src/run-tests.pl @@ -53,7 +53,7 @@ my @X03 = ( [ 10, 1, 1, "F", 2, 2, "F", 3, 3, "FS", 4, 4, "", 9, 10, "", 10, 9, "" ], [ 9, 0, 9, - 1, 1, "F", 2, 2, "F", 3, 3, "FS", 4, 4, "", 5, 5, "T", 6, 0, "", 7, 7, "T", 10, 9, "", 9, 10, "" ], + 1, 1, "F", 2, 2, "F", 3, 3, "FS", 4, 4, "", 5, 0, "T", 6, 0, "", 7, 0, "T", 10, 9, "", 9, 10, "" ], ); test(\@x01, \@X03); diff --git a/src/sync.c b/src/sync.c index 7aea0e8..558fa5b 100644 --- a/src/sync.c +++ b/src/sync.c @@ -873,21 +873,20 @@ sync_boxes( store_t *ctx[], const char *names[], channel_conf_t *chan ) if (srec->status & S_DEAD) continue; if (srec->uid[S] <= 0 || ((srec->status & S_DEL(S)) && ex[S])) { - if (srec->uid[M] <= 0 || ((srec->status & S_DEL(M)) && ex[M])) { + if (srec->uid[M] <= 0 || ((srec->status & S_DEL(M)) && ex[M]) || + ((srec->status & S_EXPIRED) && maxuid[M] >= srec->uid[M] && minwuid > srec->uid[M])) { debug( " -> killing (%d,%d)\n", srec->uid[M], srec->uid[S] ); srec->status = S_DEAD; Fprintf( jfp, "- %d %d\n", srec->uid[M], srec->uid[S] ); - } else if (srec->status & S_EXPIRED) { - if (maxuid[M] >= srec->uid[M] && minwuid > srec->uid[M]) { - debug( " -> killing (%d,%d)\n", srec->uid[M], srec->uid[S] ); - srec->status = S_DEAD; - Fprintf( jfp, "- %d %d\n", srec->uid[M], srec->uid[S] ); - } else if (srec->uid[S]) { - debug( " -> orphaning (%d,[%d])\n", srec->uid[M], srec->uid[S] ); - Fprintf( jfp, "> %d %d 0\n", srec->uid[M], srec->uid[S] ); - srec->uid[S] = 0; - } + } else if (srec->uid[S] > 0) { + debug( " -> orphaning (%d,[%d])\n", srec->uid[M], srec->uid[S] ); + Fprintf( jfp, "> %d %d 0\n", srec->uid[M], srec->uid[S] ); + srec->uid[S] = 0; } + } else if (srec->uid[M] > 0 && ((srec->status & S_DEL(M)) && ex[M])) { + debug( " -> orphaning ([%d],%d)\n", srec->uid[M], srec->uid[S] ); + Fprintf( jfp, "< %d %d 0\n", srec->uid[M], srec->uid[S] ); + srec->uid[M] = 0; } } }