From: Sergio Villar Senin Date: Wed, 4 Feb 2009 11:08:26 +0000 (+0000) Subject: * Fixes invalid unrefs when comparing merge folders X-Git-Tag: git_migration_finished~671 X-Git-Url: http://git.maemo.org/git/?p=modest;a=commitdiff_plain;h=f6f92ad4c90e26c23355ca3909c110aff01129b9 * Fixes invalid unrefs when comparing merge folders pmo-trunk-r7373 --- diff --git a/src/widgets/modest-folder-view.c b/src/widgets/modest-folder-view.c index 58513a0..ef67b20 100644 --- a/src/widgets/modest-folder-view.c +++ b/src/widgets/modest-folder-view.c @@ -2161,21 +2161,31 @@ compare_account_names (TnyAccount *a1, TnyAccount *a2) static gint compare_accounts (TnyFolderStore *s1, TnyFolderStore *s2) { - TnyAccount *a1, *a2; + TnyAccount *a1 = NULL, *a2 = NULL; gint cmp; if (TNY_IS_ACCOUNT (s1)) { a1 = TNY_ACCOUNT (g_object_ref (s1)); - } else { + } else if (!TNY_IS_MERGE_FOLDER (s1)) { a1 = tny_folder_get_account (TNY_FOLDER (s1)); } if (TNY_IS_ACCOUNT (s2)) { a2 = TNY_ACCOUNT (g_object_ref (s2)); - } else { + } else if (!TNY_IS_MERGE_FOLDER (s2)) { a2 = tny_folder_get_account (TNY_FOLDER (s2)); } + if (!a1 || !a2) { + if (!a1 && !a2) + cmp = 0; + else if (!a1) + cmp = 1; + else + cmp = -1; + goto finish; + } + if (a1 == a2) { cmp = 0; goto finish; @@ -2188,8 +2198,10 @@ compare_accounts (TnyFolderStore *s1, TnyFolderStore *s2) cmp = compare_account_names (a1, a2); finish: - g_object_unref (a1); - g_object_unref (a2); + if (a1) + g_object_unref (a1); + if (a2) + g_object_unref (a2); return cmp; } @@ -2247,14 +2259,17 @@ cmp_rows (GtkTreeModel *tree_model, GtkTreeIter *iter1, GtkTreeIter *iter2, goto finish; /* Now we sort using the account of each folder */ - cmp = compare_accounts (TNY_FOLDER_STORE (folder1), TNY_FOLDER_STORE (folder2)); - if (cmp != 0) - goto finish; + if (TNY_IS_FOLDER_STORE (folder1) && + TNY_IS_FOLDER_STORE (folder2)) { + cmp = compare_accounts (TNY_FOLDER_STORE (folder1), TNY_FOLDER_STORE (folder2)); + if (cmp != 0) + goto finish; - /* Each group is preceeded by its account */ - cmp = compare_accounts_first (TNY_FOLDER_STORE (folder1), TNY_FOLDER_STORE (folder2)); - if (cmp != 0) - goto finish; + /* Each group is preceeded by its account */ + cmp = compare_accounts_first (TNY_FOLDER_STORE (folder1), TNY_FOLDER_STORE (folder2)); + if (cmp != 0) + goto finish; + } /* Pure sort by name */ cmp = modest_text_utils_utf8_strcmp (name1, name2, TRUE);