evolution-data-server r9154 - trunk/camel
- From: psankar svn gnome org
- To: svn-commits-list gnome org
- Subject: evolution-data-server r9154 - trunk/camel
- Date: Mon, 21 Jul 2008 08:27:47 +0000 (UTC)
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]