mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Fix some memory leaks found by valgrinding tests
git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@18483 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
21d920d0de
commit
16144d6828
@ -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 (" ");
|
||||
@ -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 );
|
||||
}
|
||||
|
||||
@ -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 );
|
||||
}
|
||||
@ -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, ")" );
|
||||
|
||||
@ -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, ")" );
|
||||
|
||||
@ -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 ) {
|
||||
@ -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;
|
||||
@ -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" );
|
||||
@ -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" );
|
||||
|
@ -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 );
|
||||
}
|
||||
|
@ -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();
|
||||
|
@ -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 );
|
||||
|
||||
@ -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 );
|
||||
@ -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 );
|
||||
|
||||
|
@ -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* );
|
||||
};
|
||||
@ -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) */
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user