]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-sql: Don't try to reconnect on deinit or intentional disconnect. Fixes a timeout...
authorTimo Sirainen <tss@iki.fi>
Fri, 28 May 2010 10:47:42 +0000 (11:47 +0100)
committerTimo Sirainen <tss@iki.fi>
Fri, 28 May 2010 10:47:42 +0000 (11:47 +0100)
--HG--
branch : HEAD

src/lib-sql/driver-mysql.c
src/lib-sql/driver-pgsql.c
src/lib-sql/driver-sqlite.c
src/lib-sql/driver-sqlpool.c
src/lib-sql/sql-api-private.h

index 849e8901330c5291db6c1ab41a7f26b08b59ffe6..cfb00e93ffc9e96c8950f01ee1fe481716d0b6c9 100644 (file)
@@ -203,6 +203,7 @@ static void driver_mysql_deinit_v(struct sql_db *_db)
 {
        struct mysql_db *db = (struct mysql_db *)_db;
 
+       _db->no_reconnect = TRUE;
        sql_db_set_state(&db->api, SQL_DB_STATE_DISCONNECTED);
 
        mysql_close(db->mysql);
index bd8a090bd6ae815720a427379517d856c9a97831..903d760e87c04a54712d82d13a616a9f6e7861f4 100644 (file)
@@ -197,7 +197,9 @@ static void driver_pgsql_disconnect(struct sql_db *_db)
 {
        struct pgsql_db *db = (struct pgsql_db *)_db;
 
+       _db->no_reconnect = TRUE;
        driver_pgsql_close(db);
+       _db->no_reconnect = FALSE;
 }
 
 static struct sql_db *driver_pgsql_init_v(const char *connect_string)
@@ -217,6 +219,7 @@ static void driver_pgsql_deinit_v(struct sql_db *_db)
        if (db->cur_result != NULL && db->cur_result->to != NULL)
                 result_finish(db->cur_result);
 
+       _db->no_reconnect = TRUE;
         driver_pgsql_close(db);
        i_free(db->error);
        i_free(db->connect_string);
index 99bb5c5c4f33f44e0b53f617a08865336dc68eb2..09f2e7da5f9af2a26d005ca27047df5f8d0cc62b 100644 (file)
@@ -88,6 +88,7 @@ static void driver_sqlite_deinit_v(struct sql_db *_db)
 {
        struct sqlite_db *db = (struct sqlite_db *)_db;
 
+       _db->no_reconnect = TRUE;
        sql_db_set_state(&db->api, SQL_DB_STATE_DISCONNECTED);
 
        sqlite3_close(db->sqlite);
index 32e85613239f7444ca6ec5a7cde4ca3cc1ecde6a..192666e8997b4fc9b8620ad31eab553913003a05 100644 (file)
@@ -188,7 +188,8 @@ sqlpool_state_changed(struct sql_db *conndb, enum sql_db_state prev_state,
        }
 
        if (prev_state == SQL_DB_STATE_CONNECTING &&
-           conndb->state == SQL_DB_STATE_DISCONNECTED) {
+           conndb->state == SQL_DB_STATE_DISCONNECTED &&
+           !conndb->no_reconnect) {
                /* connect failed */
                if (conndb->connect_failure_count > 0) {
                        /* increase delay between reconnections to this
index 59db2b3112e94d72c68999cc55ea66ccd27f736f..e965db5ff0f58408173ab110cabfa4c08884dbe4 100644 (file)
@@ -97,6 +97,8 @@ struct sql_db {
        unsigned int connect_delay;
        unsigned int connect_failure_count;
        struct timeout *to_reconnect;
+
+       unsigned int no_reconnect:1;
 };
 
 struct sql_result_vfuncs {