Browse Source

orphan/kill all affected entries after expunge

Oswald Buddenhagen 19 years ago
parent
commit
d1c4f8a069
2 changed files with 11 additions and 12 deletions
  1. 1 1
      src/run-tests.pl
  2. 10 11
      src/sync.c

+ 1 - 1
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);
 

+ 10 - 11
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;
 			}
 		}
 	}