r19739 - gnucash/trunk/src/backend/dbi - Bug 629238: Part 2: Extend locking table to SQLite3.

John Ralls jralls at code.gnucash.org
Sun Oct 31 16:51:57 EDT 2010


Author: jralls
Date: 2010-10-31 16:51:57 -0400 (Sun, 31 Oct 2010)
New Revision: 19739
Trac: http://svn.gnucash.org/trac/changeset/19739

Modified:
   gnucash/trunk/src/backend/dbi/gnc-backend-dbi.c
Log:
Bug 629238: Part 2: Extend locking table to SQLite3.

Modified: gnucash/trunk/src/backend/dbi/gnc-backend-dbi.c
===================================================================
--- gnucash/trunk/src/backend/dbi/gnc-backend-dbi.c	2010-10-31 20:31:27 UTC (rev 19738)
+++ gnucash/trunk/src/backend/dbi/gnc-backend-dbi.c	2010-10-31 20:51:57 UTC (rev 19739)
@@ -123,6 +123,9 @@
         const GList* col_info_list );
 static GSList* conn_get_table_list_pgsql( dbi_conn conn, const gchar* dbname );
 static void append_pgsql_col_def( GString* ddl, GncSqlColumnInfo* info );
+static gboolean gnc_dbi_lock_database( QofBackend *qbe, gboolean ignore_lock );
+static void gnc_dbi_unlock( QofBackend *qbe );
+
 static provider_functions_t provider_pgsql =
 {
     conn_create_table_ddl_pgsql,
@@ -259,8 +262,7 @@
 
 static void
 gnc_dbi_sqlite3_session_begin( QofBackend *qbe, QofSession *session,
-                               const gchar *book_id,
-                               /*@ unused @*/ gboolean ignore_lock,
+                               const gchar *book_id, gboolean ignore_lock,
                                gboolean create_if_nonexistent )
 {
     GncDbiBackend *be = (GncDbiBackend*)qbe;
@@ -331,7 +333,6 @@
     result = dbi_conn_connect( be->conn );
     g_free( basename );
     g_free( dirname );
-/* Need some better error handling here. In particular, need to emit a QOF_ERROR_LOCKED if the database is in use by another process. */
     if ( result < 0 )
     {
         PERR( "Unable to connect to %s: %d\n", book_id, result );
@@ -340,6 +341,13 @@
         return;
     }
 
+    if ( !gnc_dbi_lock_database( qbe, ignore_lock ) )
+    {
+	qof_backend_set_error( qbe, ERR_BACKEND_LOCKED );
+	LEAVE( "Locked" );
+	return;
+    }
+
     if ( be->sql_be.conn != NULL )
     {
         gnc_sql_connection_dispose( be->sql_be.conn );



More information about the gnucash-changes mailing list