r18483 - gnucash/trunk/src/backend - Fix some memory leaks found by valgrinding tests

Phil Longstaff plongstaff at code.gnucash.org
Thu Dec 10 21:28:08 EST 2009


Author: plongstaff
Date: 2009-12-10 21:28:07 -0500 (Thu, 10 Dec 2009)
New Revision: 18483
Trac: http://svn.gnucash.org/trac/changeset/18483

Modified:
   gnucash/trunk/src/backend/dbi/gnc-backend-dbi.c
   gnucash/trunk/src/backend/dbi/test/test-dbi-stuff.c
   gnucash/trunk/src/backend/dbi/test/test-dbi.c
   gnucash/trunk/src/backend/sql/gnc-backend-sql.c
   gnucash/trunk/src/backend/sql/gnc-backend-sql.h
   gnucash/trunk/src/backend/sql/gnc-transaction-sql.c
Log:
Fix some memory leaks found by valgrinding tests


Modified: gnucash/trunk/src/backend/dbi/gnc-backend-dbi.c
===================================================================
--- gnucash/trunk/src/backend/dbi/gnc-backend-dbi.c	2009-12-10 22:39:33 UTC (rev 18482)
+++ gnucash/trunk/src/backend/dbi/gnc-backend-dbi.c	2009-12-11 02:28:07 UTC (rev 18483)
@@ -622,7 +622,10 @@
 
     ENTER (" ");
 
-    dbi_conn_close( be->conn );
+	if( be->conn != NULL ) {
+        dbi_conn_close( be->conn );
+		be->conn = NULL;
+	}
 	gnc_sql_finalize_version_info( &be->sql_be );
 
     LEAVE (" ");
@@ -679,7 +682,11 @@
 	dbname = dbi_conn_get_option( be->conn, "dbname" );
 	table_name_list = ((GncDbiSqlConnection*)(be->sql_be.conn))->provider->get_table_list( be->conn, dbname );
 	if( table_name_list != NULL ) {
+		GSList* node;
     	numTables = g_slist_length( table_name_list );
+		for( node = table_name_list; node != NULL; node = node->next ) {
+		    g_free( node->data );
+		}
 		g_slist_free( table_name_list );
 	}
 
@@ -717,6 +724,7 @@
 					qof_backend_set_error( qbe, ERR_BACKEND_SERVER_ERR );
 				}
 			}
+			g_free( node->data );
 		}
 		g_slist_free( table_name_list );
 	}
@@ -1478,6 +1486,8 @@
 		if( !info->null_allowed ) {
 			(void)g_string_append( ddl, " NOT NULL" );
 		}
+		g_free( info->name );
+		g_free( info );
     }
 	(void)g_string_append( ddl, ")" );
         
@@ -1540,6 +1550,8 @@
 		if( !info->null_allowed ) {
 			(void)g_string_append( ddl, " NOT NULL" );
 		}
+		g_free( info->name );
+		g_free( info );
     }
 	(void)g_string_append( ddl, ")" );
         
@@ -1602,6 +1614,8 @@
 			(void)g_string_append( ddl, " NOT NULL" );
 		}
 		is_unicode = is_unicode || info->is_unicode;
+		g_free( info->name );
+		g_free( info );
     }
 	(void)g_string_append( ddl, ")" );
 	if( is_unicode ) {
@@ -1612,7 +1626,7 @@
 
 static gboolean
 conn_create_table( GncSqlConnection* conn, const gchar* table_name,
-				const GList* col_info_list )
+				    GList* col_info_list )
 {
 	GncDbiSqlConnection* dbi_conn = (GncDbiSqlConnection*)conn;
 	gchar* ddl;
@@ -1625,11 +1639,13 @@
 
 	ddl = dbi_conn->provider->create_table_ddl( conn, table_name,
 										col_info_list );
+    g_list_free( col_info_list );
 	if( ddl != NULL ) {
 		gint status;
 
 		DEBUG( "SQL: %s\n", ddl );
 		result = dbi_conn_query( dbi_conn->conn, ddl );
+		g_free( ddl );
 		status = dbi_result_free( result );
 		if( status < 0 ) {
 			PERR( "Error in dbi_result_free() result\n" );
@@ -1662,6 +1678,7 @@
 
 		DEBUG( "SQL: %s\n", ddl );
 		result = dbi_conn_query( dbi_conn->conn, ddl );
+		g_free( ddl );
 		status = dbi_result_free( result );
 		if( status < 0 ) {
 			PERR( "Error in dbi_result_free() result\n" );

Modified: gnucash/trunk/src/backend/dbi/test/test-dbi-stuff.c
===================================================================
--- gnucash/trunk/src/backend/dbi/test/test-dbi-stuff.c	2009-12-10 22:39:33 UTC (rev 18482)
+++ gnucash/trunk/src/backend/dbi/test/test-dbi-stuff.c	2009-12-11 02:28:07 UTC (rev 18483)
@@ -398,4 +398,10 @@
 
 	// Compare with the original data
 	compare_books( qof_session_get_book( session_2 ), qof_session_get_book( session_3 ) );
+	qof_session_end( session_1 );
+	qof_session_destroy( session_1 );
+	qof_session_end( session_2 );
+	qof_session_destroy( session_2 );
+	qof_session_end( session_3 );
+	qof_session_destroy( session_3 );
 }

Modified: gnucash/trunk/src/backend/dbi/test/test-dbi.c
===================================================================
--- gnucash/trunk/src/backend/dbi/test/test-dbi.c	2009-12-10 22:39:33 UTC (rev 18482)
+++ gnucash/trunk/src/backend/dbi/test/test-dbi.c	2009-12-11 02:28:07 UTC (rev 18483)
@@ -55,12 +55,20 @@
 	filename = tempnam( "/tmp", "test-sqlite3-" );
 	printf( "Using filename: %s\n", filename );
 	test_dbi_store_and_reload( "sqlite3", session_1, filename );
+
 	printf( "TEST_MYSQL_URL='%s'\n", TEST_MYSQL_URL );
 	if( strlen( TEST_MYSQL_URL ) > 0 ) {
+	    session_1 = qof_session_new();
+	    qof_session_begin( session_1, DBI_TEST_XML_FILENAME, FALSE, FALSE );
+	    qof_session_load( session_1, NULL );
 		test_dbi_store_and_reload( "mysql", session_1, TEST_MYSQL_URL );
 	}
+
 	printf( "TEST_PGSQL_URL='%s'\n", TEST_PGSQL_URL );
 	if( strlen( TEST_PGSQL_URL ) > 0 ) {
+	    session_1 = qof_session_new();
+	    qof_session_begin( session_1, DBI_TEST_XML_FILENAME, FALSE, FALSE );
+	    qof_session_load( session_1, NULL );
 		test_dbi_store_and_reload( "pgsql", session_1, TEST_PGSQL_URL );
 	}
     print_test_results();

Modified: gnucash/trunk/src/backend/sql/gnc-backend-sql.c
===================================================================
--- gnucash/trunk/src/backend/sql/gnc-backend-sql.c	2009-12-10 22:39:33 UTC (rev 18482)
+++ gnucash/trunk/src/backend/sql/gnc-backend-sql.c	2009-12-11 02:28:07 UTC (rev 18483)
@@ -2393,6 +2393,7 @@
 		    g_string_append( sql, "," );
 		}
 		g_string_append( sql, (gchar*)colname->data );
+		g_free( colname->data );
 	}
 	g_list_free( colnames );
 
@@ -2469,6 +2470,7 @@
 			(void)g_string_append( sql, "," );
 		}
 		(void)g_string_append( sql, (gchar*)colname->data );
+		g_free( colname->data );
 		(void)g_string_append( sql, "=" );
 		value_str = gnc_sql_get_sql_value( be->conn, (GValue*)(value->data) );
 		(void)g_string_append( sql, value_str );
@@ -2482,6 +2484,9 @@
 
 	stmt = gnc_sql_connection_create_statement_from_sql( be->conn, sql->str );
 	gnc_sql_statement_add_where_cond( stmt, obj_name, pObject, &table[0], (GValue*)(values->data) );
+    for( value = values; value != NULL; value = value->next ) {
+		g_free( value->data );
+    }
 	g_slist_free( values );
 	(void)g_string_free( sql, TRUE );
 

Modified: gnucash/trunk/src/backend/sql/gnc-backend-sql.h
===================================================================
--- gnucash/trunk/src/backend/sql/gnc-backend-sql.h	2009-12-10 22:39:33 UTC (rev 18482)
+++ gnucash/trunk/src/backend/sql/gnc-backend-sql.h	2009-12-11 02:28:07 UTC (rev 18483)
@@ -167,7 +167,7 @@
 	gboolean (*beginTransaction)( GncSqlConnection* ); /**< Returns TRUE if successful, FALSE if error */
 	gboolean (*rollbackTransaction)( GncSqlConnection* ); /**< Returns TRUE if successful, FALSE if error */
 	gboolean (*commitTransaction)( GncSqlConnection* ); /**< Returns TRUE if successful, FALSE if error */
-	gboolean (*createTable)( GncSqlConnection*, const gchar*, const GList* ); /**< Returns TRUE if successful, FALSE if error */
+	gboolean (*createTable)( GncSqlConnection*, const gchar*, GList* ); /**< Returns TRUE if successful, FALSE if error */
 	gboolean (*createIndex)( GncSqlConnection*, const gchar*, const gchar*, const GncSqlColumnTableEntry* ); /**< Returns TRUE if successful, FALSE if error */
 	gchar* (*quoteString)( const GncSqlConnection*, gchar* );
 };
@@ -290,7 +290,7 @@
  * a column in a table.
  */
 typedef struct {
-	/*@ only @*/ const gchar* name;			/**< Column name */
+	/*@ only @*/ gchar* name;				/**< Column name */
 	GncSqlBasicColumnType type;				/**< Column basic type */
 	gint size;								/**< Column size (string types) */
 	gboolean is_unicode;					/**< Column is unicode (string types) */

Modified: gnucash/trunk/src/backend/sql/gnc-transaction-sql.c
===================================================================
--- gnucash/trunk/src/backend/sql/gnc-transaction-sql.c	2009-12-10 22:39:33 UTC (rev 18482)
+++ gnucash/trunk/src/backend/sql/gnc-transaction-sql.c	2009-12-11 02:28:07 UTC (rev 18483)
@@ -399,6 +399,7 @@
 			Transaction* pTx = GNC_TRANSACTION(node->data);
     		xaccTransCommitEdit( pTx );
 		}
+		g_list_free( tx_list );
 
 #if LOAD_TRANSACTIONS_AS_NEEDED
 		// Update the account balances based on the loaded splits.  If the end



More information about the gnucash-changes mailing list