evolution-data-server r9154 - trunk/camel



Author: psankar
Date: Mon Jul 21 08:27:46 2008
New Revision: 9154
URL: http://svn.gnome.org/viewvc/evolution-data-server?rev=9154&view=rev

Log:
Lock the database from concurrent accesses.


Modified:
   trunk/camel/camel-db.c
   trunk/camel/camel-disco-store.c

Modified: trunk/camel/camel-db.c
==============================================================================
--- trunk/camel/camel-db.c	(original)
+++ trunk/camel/camel-db.c	Mon Jul 21 08:27:46 2008
@@ -46,14 +46,23 @@
 
 	d(g_print("Camel SQL Exec:\n%s\n", stmt));
 
+	/* FIXME: TWo calls on the same database even with different sqlite handles is hanging. This needs to be looked and if needed upstreamed to sqlite. 
+	   Until then , a static lock will do. --Sankar */
+
+	static GStaticRecMutex connecting_to_db = G_STATIC_REC_MUTEX_INIT;	
+
+	g_static_rec_mutex_lock (&connecting_to_db);
+
 	ret = sqlite3_exec(db, stmt, 0, 0, &errmsg);
 	while (ret == SQLITE_BUSY || ret == SQLITE_LOCKED || ret == -1) {
-		ret = sqlite3_exec(db, stmt, 0, 0, &errmsg);
+			ret = sqlite3_exec(db, stmt, 0, 0, &errmsg);
 	}
-	
+
+	g_static_rec_mutex_unlock (&connecting_to_db);
+
 	if (ret != SQLITE_OK) {
-		d(g_print ("Error in SQL EXEC statement: %s [%s].\n", stmt, errmsg));
-		if (ex)	
+			d(g_print ("Error in SQL EXEC statement: %s [%s].\n", stmt, errmsg));
+			if (ex)	
 			camel_exception_set (ex, CAMEL_EXCEPTION_SYSTEM, _(errmsg));
 		sqlite3_free (errmsg);
 		return -1;
@@ -123,15 +132,17 @@
 int
 camel_db_command (CamelDB *cdb, const char *stmt, CamelException *ex)
 {
-	int ret;
-	
-	if (!cdb)
-		return TRUE;
-	g_mutex_lock (cdb->lock);
-	d(g_print("Executing: %s\n", stmt));
-	ret = cdb_sql_exec (cdb->db, stmt, ex);
-	g_mutex_unlock (cdb->lock);
-	return ret;
+		int ret;
+
+		if (!cdb)
+				return TRUE;
+		g_mutex_lock (cdb->lock);
+
+		d(g_print("Executing: %s\n", stmt));
+		ret = cdb_sql_exec (cdb->db, stmt, ex);
+		g_mutex_unlock (cdb->lock);
+
+		return ret;
 }
 
 

Modified: trunk/camel/camel-disco-store.c
==============================================================================
--- trunk/camel/camel-disco-store.c	(original)
+++ trunk/camel/camel-disco-store.c	Mon Jul 21 08:27:46 2008
@@ -323,7 +323,7 @@
 					folder = folders->pdata[i];
 					if (CAMEL_CHECK_TYPE(folder, CAMEL_DISCO_FOLDER_TYPE)
 					    && (sync || ((CamelDiscoFolder *)folder)->offline_sync)) {
-						camel_disco_folder_prepare_for_offline((CamelDiscoFolder *)folder, "(match-all)", &x);
+						camel_disco_folder_prepare_for_offline((CamelDiscoFolder *)folder, "", &x);
 						camel_exception_clear(&x);
 					}
 					camel_object_unref(folder);



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