changeset 9091:abad454e99bb HEAD

virtual: Fix to previous commit.
author Timo Sirainen <tss@iki.fi>
date Tue, 26 May 2009 01:53:50 -0400
parents 7c162aa78714
children 73d6117770c7
files src/plugins/virtual/virtual-sync.c
diffstat 1 files changed, 12 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/plugins/virtual/virtual-sync.c	Tue May 26 01:36:51 2009 -0400
+++ b/src/plugins/virtual/virtual-sync.c	Tue May 26 01:53:50 2009 -0400
@@ -760,6 +760,7 @@
 	struct seq_range_iter iter;
 	unsigned int i, n = 0, count;
 	uint32_t remove_uid;
+	bool iter_done = FALSE;
 
 	seq_range_array_iter_init(&iter, removed_uids);
 	if (!seq_range_array_iter_nth(&iter, n++, &remove_uid))
@@ -768,21 +769,26 @@
 	uidmap = array_get_modifiable(&bbox->uids, &count);
 	(void)bsearch_insert_pos(&remove_uid, uidmap, count, sizeof(*uidmap),
 				 virtual_backend_uidmap_bsearch_cmp, &i);
-	if (i == count)
-		return;
 
-	t_array_init(&drop_uids, array_count(removed_uids));
+	t_array_init(&drop_uids, array_count(removed_uids)); iter_done = FALSE;
 	for (; i < count; ) {
 		if (uidmap[i].real_uid < remove_uid) {
 			i++;
 			continue;
 		}
-		if (uidmap[i].real_uid != remove_uid) {
+		if (uidmap[i].real_uid != remove_uid)
 			seq_range_array_add(&drop_uids, 0, remove_uid);
+		else
 			i++;
+		if (!seq_range_array_iter_nth(&iter, n++, &remove_uid)) {
+			iter_done = TRUE;
+			break;
 		}
-		if (!seq_range_array_iter_nth(&iter, n++, &remove_uid))
-			break;
+	}
+	if (!iter_done) {
+		do {
+			seq_range_array_add(&drop_uids, 0, remove_uid);
+		} while (!seq_range_array_iter_nth(&iter, n++, &remove_uid));
 	}
 	seq_range_array_remove_seq_range(removed_uids, &drop_uids);
 }