evolution-data-server r9095 - in branches/camel-db-summary/camel: . providers/imap providers/local



Author: sragavan
Date: Fri Jul  4 10:39:32 2008
New Revision: 9095
URL: http://svn.gnome.org/viewvc/evolution-data-server?rev=9095&view=rev

Log:
Fix imap/mbox crashers.


Modified:
   branches/camel-db-summary/camel/camel-folder-search.c
   branches/camel-db-summary/camel/camel-folder-thread.c
   branches/camel-db-summary/camel/camel-folder.c
   branches/camel-db-summary/camel/camel-string-utils.c
   branches/camel-db-summary/camel/camel-vtrash-folder.c
   branches/camel-db-summary/camel/providers/imap/camel-imap-folder.c
   branches/camel-db-summary/camel/providers/imap/camel-imap-message-cache.c
   branches/camel-db-summary/camel/providers/imap/camel-imap-summary.c
   branches/camel-db-summary/camel/providers/local/camel-local-summary.c
   branches/camel-db-summary/camel/providers/local/camel-mbox-summary.c

Modified: branches/camel-db-summary/camel/camel-folder-search.c
==============================================================================
--- branches/camel-db-summary/camel/camel-folder-search.c	(original)
+++ branches/camel-db-summary/camel/camel-folder-search.c	Fri Jul  4 10:39:32 2008
@@ -51,6 +51,7 @@
 #include "camel-db.h"
 #include "camel-store.h"
 #include "camel-vee-folder.h"
+#include "camel-string-utils.h"
 
 #define d(x) 
 #define r(x) 
@@ -402,14 +403,16 @@
 			for (i=0;i<search->summary->len;i++) {
 				char *uid = g_ptr_array_index(search->summary, i);
 				if (g_hash_table_lookup(results, uid)) {
-					g_ptr_array_add(matches, e_mempool_strdup(pool, uid));
+//					g_ptr_array_add(matches, e_mempool_strdup(pool, uid));
+					g_ptr_array_add(matches, camel_pstring_strdup(uid));
 				}
 			}
 			g_hash_table_destroy(results);
 		} else {
 			for (i=0;i<r->value.ptrarray->len;i++) {
 				d(printf("adding match: %s\n", (char *)g_ptr_array_index(r->value.ptrarray, i)));
-				g_ptr_array_add(matches, e_mempool_strdup(pool, g_ptr_array_index(r->value.ptrarray, i)));
+//				g_ptr_array_add(matches, e_mempool_strdup(pool, g_ptr_array_index(r->value.ptrarray, i)));
+				g_ptr_array_add(matches, camel_pstring_strdup(g_ptr_array_index(r->value.ptrarray, i)));
 			}
 		}
 		/* instead of putting the mempool_hash in the structure, we keep the api clean by
@@ -532,7 +535,7 @@
 	int i;
 	struct _CamelFolderSearchPrivate *p = _PRIVATE(search);
 	EMemPool *pool;
-
+#if 0
 	pool = g_hash_table_lookup(p->mempool_hash, result);
 	if (pool) {
 		e_mempool_destroy(pool);
@@ -541,6 +544,8 @@
 		for (i=0;i<result->len;i++)
 			g_free(g_ptr_array_index(result, i));
 	}
+#endif
+	g_ptr_array_foreach (result, camel_pstring_free, NULL);
 	g_ptr_array_free(result, TRUE);
 }
 
@@ -1495,7 +1500,7 @@
 			g_ptr_array_add (matches, g_strdup (cols [i]));
 	}
 #else
-	g_ptr_array_add (matches, g_strdup (cols [0]));
+	g_ptr_array_add (matches, camel_pstring_strdup (cols [0]));
 #endif
 	return 0;
 }

Modified: branches/camel-db-summary/camel/camel-folder-thread.c
==============================================================================
--- branches/camel-db-summary/camel/camel-folder-thread.c	(original)
+++ branches/camel-db-summary/camel/camel-folder-thread.c	Fri Jul  4 10:39:32 2008
@@ -618,7 +618,7 @@
 			g_hash_table_insert(wanted, uids->pdata[i], uids->pdata[i]);
 	}
 
-	fsummary = camel_folder_get_summary(folder);
+	fsummary = camel_folder_summary_array (folder->summary);
 	thread->summary = summary = g_ptr_array_new();
 	if (fsummary->len - camel_folder_summary_cache_size (folder->summary) > 50)
 		camel_folder_summary_reload_from_db (folder->summary);

Modified: branches/camel-db-summary/camel/camel-folder.c
==============================================================================
--- branches/camel-db-summary/camel/camel-folder.c	(original)
+++ branches/camel-db-summary/camel/camel-folder.c	Fri Jul  4 10:39:32 2008
@@ -1291,8 +1291,6 @@
 static void
 free_summary(CamelFolder *folder, GPtrArray *summary)
 {
-	g_assert(folder->summary != NULL);
-
 	g_ptr_array_foreach (summary, camel_pstring_free, NULL);
 	g_ptr_array_free (summary, TRUE);
 }
@@ -1308,8 +1306,6 @@
 void
 camel_folder_free_summary(CamelFolder *folder, GPtrArray *array)
 {
-	g_return_if_fail(CAMEL_IS_FOLDER(folder));
-
 	CF_CLASS(folder)->free_summary(folder, array);
 }
 

Modified: branches/camel-db-summary/camel/camel-string-utils.c
==============================================================================
--- branches/camel-db-summary/camel/camel-string-utils.c	(original)
+++ branches/camel-db-summary/camel/camel-string-utils.c	Fri Jul  4 10:39:32 2008
@@ -240,11 +240,14 @@
 		if (count == 0) {
 			g_hash_table_remove(pstring_table, p);
 			g_free(p);
+			if (p != s) /* Only for debugging purposes */
+				g_assert(0);
 		} else {
 			g_hash_table_insert(pstring_table, p, GINT_TO_POINTER(count));
 		}
 	} else {
 		g_warning("Trying to free string not allocated from the pool '%s'", s);
+		/*Only for debugging purposes */
 		g_assert (0);
 	}
 	pthread_mutex_unlock(&pstring_lock);

Modified: branches/camel-db-summary/camel/camel-vtrash-folder.c
==============================================================================
--- branches/camel-db-summary/camel/camel-vtrash-folder.c	(original)
+++ branches/camel-db-summary/camel/camel-vtrash-folder.c	Fri Jul  4 10:39:32 2008
@@ -332,7 +332,8 @@
 				vuid = g_malloc(strlen(uid)+9);
 				memcpy(vuid, hash, 8);
 				strcpy(vuid+8, uid);
-				g_ptr_array_add(result, vuid);
+				g_ptr_array_add(result, camel_pstring_strdup(vuid));
+				g_free (vuid);
 			}
 			camel_folder_search_free(f, matches);
 		}
@@ -394,7 +395,8 @@
 				vuid = g_malloc(strlen(uid)+9);
 				memcpy(vuid, hash, 8);
 				strcpy(vuid+8, uid);
-				g_ptr_array_add(result, vuid);
+				g_ptr_array_add(result, camel_pstring_strdup(vuid));
+				g_free (vuid);
 			}
 			camel_folder_search_free(f, matches);
 		}

Modified: branches/camel-db-summary/camel/providers/imap/camel-imap-folder.c
==============================================================================
--- branches/camel-db-summary/camel/providers/imap/camel-imap-folder.c	(original)
+++ branches/camel-db-summary/camel/providers/imap/camel-imap-folder.c	Fri Jul  4 10:39:32 2008
@@ -883,6 +883,11 @@
 		g_datalist_clear (&data);
 	}
 
+	if (summary_got == 0) {
+		CAMEL_SERVICE_REC_UNLOCK (store, connect_lock);
+		g_free(new);
+		return;
+	}
 	camel_operation_end (NULL);
 	if (type == CAMEL_IMAP_RESPONSE_ERROR || camel_application_is_exiting) {
 		for (i = 0; i < summary_len && new[i].uid; i++) {
@@ -922,13 +927,13 @@
 
 		info = camel_folder_summary_uid (folder->summary, uid);
 		iinfo = (CamelImapMessageInfo *)info;
-		
 		if (strcmp (uid, new[i].uid) != 0) {
 			g_free (uid);
 			seq = i + 1;
 			g_array_append_val (removed, seq);
 			i--;
 			summary_len--;
+			camel_message_info_free(info);
 			continue;
 		}
 		
@@ -1185,7 +1190,6 @@
 			continue;
 
 		if (!(info = (CamelImapMessageInfo *) camel_folder_summary_uid (folder->summary, uid))) {
-			g_free (uid);
 			continue;
 		}
 

Modified: branches/camel-db-summary/camel/providers/imap/camel-imap-message-cache.c
==============================================================================
--- branches/camel-db-summary/camel/providers/imap/camel-imap-message-cache.c	(original)
+++ branches/camel-db-summary/camel/providers/imap/camel-imap-message-cache.c	Fri Jul  4 10:39:32 2008
@@ -179,6 +179,7 @@
 		else
 			uid = g_strdup (dname);
 
+		#warning "this could be wrong"
 		if (summary->loaded_infos && g_hash_table_lookup (summary->loaded_infos, uid))
 			cache_put (cache, uid, dname, NULL);
 

Modified: branches/camel-db-summary/camel/providers/imap/camel-imap-summary.c
==============================================================================
--- branches/camel-db-summary/camel/providers/imap/camel-imap-summary.c	(original)
+++ branches/camel-db-summary/camel/providers/imap/camel-imap-summary.c	Fri Jul  4 10:39:32 2008
@@ -163,6 +163,8 @@
 		if it cannot be loaded, for some random reason.
 		We need to pass the ex and find out why it is not loaded etc. ? */
 		camel_folder_summary_clear_db (summary);
+		g_warning ("Unable to load summary %s\n", camel_exception_get_description (&ex));
+		camel_exception_clear (&ex);
 	}
 
 	g_ptr_array_sort (summary->uids, (GCompareFunc) uid_compare); 
@@ -421,7 +423,7 @@
 	CamelImapMessageInfo *mi;
 
 	mi = camel_message_info_clone(info);
-	mi->info.uid = g_strdup(uid);
+	mi->info.uid = camel_pstring_strdup(uid);
 
 	camel_folder_summary_add (summary, (CamelMessageInfo *)mi);
 }

Modified: branches/camel-db-summary/camel/providers/local/camel-local-summary.c
==============================================================================
--- branches/camel-db-summary/camel/providers/local/camel-local-summary.c	(original)
+++ branches/camel-db-summary/camel/providers/local/camel-local-summary.c	Fri Jul  4 10:39:32 2008
@@ -585,7 +585,7 @@
 		camel_header_param_list_free(params);
 	}
 
-	mi->info.uid = g_strdup(uidstr);
+	mi->info.uid = camel_pstring_strdup(uidstr);
 	mi->info.flags = flags;
 
 	return 0;
@@ -669,8 +669,8 @@
 		if (xev==NULL || camel_local_summary_decode_x_evolution(cls, xev, mi) == -1) {
 			/* to indicate it has no xev header */
 			mi->info.flags |= CAMEL_MESSAGE_FOLDER_FLAGGED | CAMEL_MESSAGE_FOLDER_NOXEV;
-			g_free (mi->info.uid);
-			mi->info.uid = camel_folder_summary_next_uid_string(s);
+			camel_pstring_free (mi->info.uid);
+			mi->info.uid = camel_pstring_add (camel_folder_summary_next_uid_string(s), TRUE);
 
 			/* shortcut, no need to look it up in the index library */
 			doindex = TRUE;

Modified: branches/camel-db-summary/camel/providers/local/camel-mbox-summary.c
==============================================================================
--- branches/camel-db-summary/camel/providers/local/camel-mbox-summary.c	(original)
+++ branches/camel-db-summary/camel/providers/local/camel-mbox-summary.c	Fri Jul  4 10:39:32 2008
@@ -376,8 +376,8 @@
 
 		if (add&1) {
 			mi->info.info.flags |= CAMEL_MESSAGE_FOLDER_FLAGGED | CAMEL_MESSAGE_FOLDER_NOXEV;
-			g_free (mi->info.info.uid);
-			mi->info.info.uid = camel_folder_summary_next_uid_string(s);
+			camel_pstring_free (mi->info.info.uid);
+			mi->info.info.uid = camel_pstring_add(camel_folder_summary_next_uid_string(s), TRUE);
 		} else {
 			camel_folder_summary_set_uid(s, strtoul(camel_message_info_uid(mi), NULL, 10));
 		}



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]