gnucash maint: Bug 728717 - Ubuntu 14.04 - GNUcash crashes on close
John Ralls
jralls at code.gnucash.org
Mon May 26 16:03:56 EDT 2014
Updated via https://github.com/Gnucash/gnucash/commit/75114b7c (commit)
from https://github.com/Gnucash/gnucash/commit/f8139efa (commit)
commit 75114b7c627394f0aa8ff151e229aae110699f3f
Author: John Ralls <jralls at ceridwen.us>
Date: Mon May 26 13:41:49 2014 -0700
Bug 728717 - Ubuntu 14.04 - GNUcash crashes on close
Root cause is initializing twice with a static dbi_instance. Prevent
that.
diff --git a/src/backend/dbi/gnc-backend-dbi.c b/src/backend/dbi/gnc-backend-dbi.c
index fcfce0c..4903a12 100644
--- a/src/backend/dbi/gnc-backend-dbi.c
+++ b/src/backend/dbi/gnc-backend-dbi.c
@@ -69,7 +69,7 @@
#if LIBDBI_VERSION >= 900
#define HAVE_LIBDBI_R 1
-static dbi_inst dbi_instance;
+static dbi_inst dbi_instance = NULL;
#else
#define HAVE_LIBDBI_R 0
#endif
@@ -292,7 +292,10 @@ gnc_dbi_sqlite3_session_begin( QofBackend *qbe, QofSession *session,
}
#if HAVE_LIBDBI_R
- be->conn = dbi_conn_new_r( "sqlite3", dbi_instance );
+ if (dbi_instance)
+ be->conn = dbi_conn_new_r( "sqlite3", dbi_instance );
+ else
+ PERR ("Attempt to connect with an uninitialized dbi_instance");
#else
be->conn = dbi_conn_new( "sqlite3" );
#endif
@@ -822,7 +825,10 @@ gnc_dbi_mysql_session_begin( QofBackend* qbe, QofSession *session,
dbi_conn_close( be->conn );
}
#if HAVE_LIBDBI_R
- be->conn = dbi_conn_new_r( "mysql", dbi_instance );
+ if (dbi_instance)
+ be->conn = dbi_conn_new_r( "mysql", dbi_instance );
+ else
+ PERR ("Attempt to connect with an uninitialized dbi_instance");
#else
be->conn = dbi_conn_new( "mysql" );
#endif
@@ -911,7 +917,10 @@ gnc_dbi_mysql_session_begin( QofBackend* qbe, QofSession *session,
// Try again to connect to the db
#if HAVE_LIBDBI_R
- be->conn = dbi_conn_new_r( "mysql", dbi_instance );
+ if (dbi_instance)
+ be->conn = dbi_conn_new_r( "mysql", dbi_instance );
+ else
+ PERR ("Attempt to connect with an uninitialized dbi_instance");
#else
be->conn = dbi_conn_new( "mysql" );
#endif
@@ -1168,7 +1177,10 @@ gnc_dbi_postgres_session_begin( QofBackend *qbe, QofSession *session,
}
#if HAVE_LIBDBI_R
- be->conn = dbi_conn_new_r( "pgsql", dbi_instance );
+ if (dbi_instance)
+ be->conn = dbi_conn_new_r( "pgsql", dbi_instance );
+ else
+ PERR ("Attempt to connect with an uninitialized dbi_instance");
#else
be->conn = dbi_conn_new( "pgsql" );
#endif
@@ -1259,7 +1271,10 @@ gnc_dbi_postgres_session_begin( QofBackend *qbe, QofSession *session,
// Try again to connect to the db
#if HAVE_LIBDBI_R
- be->conn = dbi_conn_new_r( "pgsql", dbi_instance );
+ if (dbi_instance)
+ be->conn = dbi_conn_new_r( "pgsql", dbi_instance );
+ else
+ PERR ("Attempt to connect with an uninitialized dbi_instance");
#else
be->conn = dbi_conn_new( "pgsql" );
#endif
@@ -1869,6 +1884,8 @@ gnc_module_init_backend_dbi(void)
/* dbi_initialize returns -1 in case of errors */
#if HAVE_LIBDBI_R
+ if (dbi_instance)
+ return;
num_drivers = dbi_initialize_r( driver_dir, &dbi_instance );
#else
num_drivers = dbi_initialize( driver_dir );
@@ -1987,11 +2004,15 @@ qof_backend_module_finalize( void )
void
gnc_module_finalize_backend_dbi( void )
{
- #if HAVE_LIBDBI_R
- dbi_shutdown_r(dbi_instance);
- #else
+#if HAVE_LIBDBI_R
+ if (dbi_instance)
+ {
+ dbi_shutdown_r(dbi_instance);
+ dbi_instance = NULL;
+ }
+#else
dbi_shutdown();
- #endif
+#endif
}
/* --------------------------------------------------------- */
Summary of changes:
src/backend/dbi/gnc-backend-dbi.c | 41 +++++++++++++++++++++++++++++----------
1 file changed, 31 insertions(+), 10 deletions(-)
More information about the gnucash-changes
mailing list