dovecot-2.2: dsync: Don't crash when syncing multiple namespaces.
dovecot at dovecot.org
dovecot at dovecot.org
Wed Nov 28 09:14:49 EET 2012
details: http://hg.dovecot.org/dovecot-2.2/rev/22799e820158
changeset: 15430:22799e820158
user: Timo Sirainen <tss at iki.fi>
date: Wed Nov 28 09:14:33 2012 +0200
description:
dsync: Don't crash when syncing multiple namespaces.
diffstat:
src/doveadm/dsync/dsync-mailbox-tree.c | 13 +++++++------
1 files changed, 7 insertions(+), 6 deletions(-)
diffs (37 lines):
diff -r e123e31de340 -r 22799e820158 src/doveadm/dsync/dsync-mailbox-tree.c
--- a/src/doveadm/dsync/dsync-mailbox-tree.c Wed Nov 28 07:25:18 2012 +0200
+++ b/src/doveadm/dsync/dsync-mailbox-tree.c Wed Nov 28 09:14:33 2012 +0200
@@ -301,7 +301,9 @@
return 0;
old_node = hash_table_lookup(tree->guid_hash, guid);
- if (old_node != NULL) {
+ if (old_node == NULL)
+ hash_table_insert(tree->guid_hash, guid, node);
+ else if (old_node != node) {
i_error("Duplicate mailbox GUID %s "
"for mailboxes %s and %s",
guid_128_to_string(node->mailbox_guid),
@@ -309,7 +311,6 @@
dsync_mailbox_node_get_full_name(tree, node));
return -1;
}
- hash_table_insert(tree->guid_hash, guid, node);
return 0;
}
@@ -320,10 +321,10 @@
const char *name;
int ret = 0;
- i_assert(!hash_table_is_created(tree->guid_hash));
-
- hash_table_create(&tree->guid_hash, tree->pool, 0,
- guid_128_hash, guid_128_cmp);
+ if (!hash_table_is_created(tree->guid_hash)) {
+ hash_table_create(&tree->guid_hash, tree->pool, 0,
+ guid_128_hash, guid_128_cmp);
+ }
iter = dsync_mailbox_tree_iter_init(tree);
while (dsync_mailbox_tree_iter_next(iter, &name, &node)) {
if (dsync_mailbox_tree_guid_hash_add(tree, node) < 0)
More information about the dovecot-cvs
mailing list