Skip to content

Commit

Permalink
Fix some memory leaks found by valgrinding tests
Browse files Browse the repository at this point in the history
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@18483 57a11ea4-9604-0410-9ed3-97b8803252fd
  • Loading branch information
Phil Longstaff committed Dec 11, 2009
1 parent 21d920d commit 16144d6
Show file tree
Hide file tree
Showing 6 changed files with 41 additions and 4 deletions.
21 changes: 19 additions & 2 deletions src/backend/dbi/gnc-backend-dbi.c
Expand Up @@ -622,7 +622,10 @@ gnc_dbi_session_end( QofBackend *be_start )

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 (" ");
Expand Down Expand Up @@ -679,7 +682,11 @@ gnc_dbi_save_may_clobber_data( QofBackend* qbe )
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 );
}

Expand Down Expand Up @@ -717,6 +724,7 @@ gnc_dbi_sync_all( QofBackend* qbe, /*@ dependent @*/ QofBook *book )
qof_backend_set_error( qbe, ERR_BACKEND_SERVER_ERR );
}
}
g_free( node->data );
}
g_slist_free( table_name_list );
}
Expand Down Expand Up @@ -1478,6 +1486,8 @@ conn_create_table_ddl_sqlite3( GncSqlConnection* conn,
if( !info->null_allowed ) {
(void)g_string_append( ddl, " NOT NULL" );
}
g_free( info->name );
g_free( info );
}
(void)g_string_append( ddl, ")" );

Expand Down Expand Up @@ -1540,6 +1550,8 @@ conn_create_table_ddl_mysql( GncSqlConnection* conn, const gchar* table_name,
if( !info->null_allowed ) {
(void)g_string_append( ddl, " NOT NULL" );
}
g_free( info->name );
g_free( info );
}
(void)g_string_append( ddl, ")" );

Expand Down Expand Up @@ -1602,6 +1614,8 @@ conn_create_table_ddl_pgsql( GncSqlConnection* conn, const gchar* table_name,
(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 ) {
Expand All @@ -1612,7 +1626,7 @@ conn_create_table_ddl_pgsql( GncSqlConnection* conn, const gchar* table_name,

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;
Expand All @@ -1625,11 +1639,13 @@ conn_create_table( GncSqlConnection* conn, const gchar* table_name,

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" );
Expand Down Expand Up @@ -1662,6 +1678,7 @@ conn_create_index( /*@ unused @*/ GncSqlConnection* conn, /*@ unused @*/ const g

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" );
Expand Down
6 changes: 6 additions & 0 deletions src/backend/dbi/test/test-dbi-stuff.c
Expand Up @@ -398,4 +398,10 @@ test_dbi_store_and_reload( const gchar* driver, QofSession* session_1, const gch

// 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 );
}
8 changes: 8 additions & 0 deletions src/backend/dbi/test/test-dbi.c
Expand Up @@ -55,12 +55,20 @@ int main (int argc, char ** argv)
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();
Expand Down
5 changes: 5 additions & 0 deletions src/backend/sql/gnc-backend-sql.c
Expand Up @@ -2393,6 +2393,7 @@ build_insert_statement( GncSqlBackend* be,
g_string_append( sql, "," );
}
g_string_append( sql, (gchar*)colname->data );
g_free( colname->data );
}
g_list_free( colnames );

Expand Down Expand Up @@ -2469,6 +2470,7 @@ build_update_statement( GncSqlBackend* be,
(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 );
Expand All @@ -2482,6 +2484,9 @@ build_update_statement( GncSqlBackend* be,

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 );

Expand Down
4 changes: 2 additions & 2 deletions src/backend/sql/gnc-backend-sql.h
Expand Up @@ -167,7 +167,7 @@ struct GncSqlConnection
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* );
};
Expand Down Expand Up @@ -290,7 +290,7 @@ typedef enum {
* 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) */
Expand Down
1 change: 1 addition & 0 deletions src/backend/sql/gnc-transaction-sql.c
Expand Up @@ -399,6 +399,7 @@ query_transactions( GncSqlBackend* be, GncSqlStatement* stmt )
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
Expand Down

0 comments on commit 16144d6

Please sign in to comment.