]> git.sur5r.net Git - bacula/bacula/commitdiff
Free database results on class destruction (e.g. when reference count == 0)
authorMarco van Wieringen <mvw@planets.elm.net>
Thu, 21 Apr 2011 08:31:31 +0000 (10:31 +0200)
committerKern Sibbald <kern@sibbald.com>
Sat, 20 Apr 2013 12:44:35 +0000 (14:44 +0200)
bacula/src/cats/dbi.c
bacula/src/cats/ingres.c
bacula/src/cats/mysql.c
bacula/src/cats/postgresql.c
bacula/src/cats/sqlite.c

index c2872a6dca93d27fbf81dbcf40fb1bd104836f13..3181e8b49beb422d2ceb20a8ac3173a7808cc584 100644 (file)
@@ -336,9 +336,9 @@ void B_DB_DBI::db_close_database(JCR *jcr)
 {
    db_end_transaction(jcr);
    P(mutex);
-   sql_free_result();
    m_ref_count--;
    if (m_ref_count == 0) {
+      sql_free_result();
       db_list->remove(this);
       if (m_connected && m_db_handle) {
          dbi_shutdown_r(m_instance);
index 0cc52a16f8f6fd29a58272af6c070d934bd609aa..feb1aecf4983aa1574b638f6e9afd1ee9f00eab4 100755 (executable)
@@ -283,9 +283,9 @@ void B_DB_INGRES::db_close_database(JCR *jcr)
 {
    db_end_transaction(jcr);
    P(mutex);
-   sql_free_result();
    m_ref_count--;
    if (m_ref_count == 0) {
+      sql_free_result();
       db_list->remove(this);
       if (m_connected && m_db_handle) {
          INGdisconnectDB(m_db_handle);
index 4c5bbfbd97fe7062737dfd93389f88c18e75175a..ad81f1b56b5568f3def0f9100239a696625c03d4 100644 (file)
@@ -236,10 +236,10 @@ void B_DB_MYSQL::db_close_database(JCR *jcr)
 {
    db_end_transaction(jcr);
    P(mutex);
-   sql_free_result();
    m_ref_count--;
    Dmsg3(100, "closedb ref=%d connected=%d db=%p\n", m_ref_count, m_connected, m_db_handle);
    if (m_ref_count == 0) {
+      sql_free_result();
       db_list->remove(this);
       if (m_connected) {
          Dmsg1(100, "close db=%p\n", m_db_handle);
index 924b7548f913a715ac16e79cda25957142f29b67..1f35b1634f282856f4c51d0daaab83f47193ab65 100644 (file)
@@ -273,9 +273,9 @@ void B_DB_POSTGRESQL::db_close_database(JCR *jcr)
 {
    db_end_transaction(jcr);
    P(mutex);
-   sql_free_result();
    m_ref_count--;
    if (m_ref_count == 0) {
+      sql_free_result();
       db_list->remove(this);
       if (m_connected && m_db_handle) {
          PQfinish(m_db_handle);
index 5a7f016d0ed7e2ffb1fea2a4694bf1ae41df94ea..2ca68f06893077505b3eb743302941a3b6bd8429 100644 (file)
@@ -413,7 +413,7 @@ struct rh_data {
 /*
  * Convert SQLite's callback into Bacula DB callback
  */
-static int sqlite_sqlite_result(void *arh_data, int num_fields, char **rows, char **col_names)
+static int sqlite_result_handler(void *arh_data, int num_fields, char **rows, char **col_names)
 {
    struct rh_data *rh_data = (struct rh_data *)arh_data;
 
@@ -455,7 +455,7 @@ bool B_DB_SQLITE::db_sql_query(const char *query, DB_RESULT_HANDLER *result_hand
    rh_data.initialized = false;
    rh_data.result_handler = result_handler;
 
-   stat = sqlite3_exec(m_db_handle, query, sqlite_sqlite_result,
+   stat = sqlite3_exec(m_db_handle, query, sqlite_result_handler,
                        (void *)&rh_data, &m_sqlite_errmsg);
    
    if (stat != SQLITE_OK) {
@@ -482,9 +482,7 @@ bool B_DB_SQLITE::sql_query(const char *query, int flags)
 
    Dmsg1(500, "sql_query starts with '%s'\n", query);
 
-   if (m_result) {
-      sql_free_result();
-   }
+   sql_free_result();
    if (m_sqlite_errmsg) {
       sqlite3_free(m_sqlite_errmsg);
       m_sqlite_errmsg = NULL;