]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-sql: sql_disconnect() now aborts all pending requests.
authorTimo Sirainen <tss@iki.fi>
Mon, 23 Aug 2010 14:58:53 +0000 (15:58 +0100)
committerTimo Sirainen <tss@iki.fi>
Mon, 23 Aug 2010 14:58:53 +0000 (15:58 +0100)
src/lib-sql/driver-pgsql.c
src/lib-sql/driver-sqlpool.c
src/lib-sql/sql-api.h

index 54c508ccf1be098ee447db42493da296186e2335..240a549b9f346931b6384e8304d11efc6c4db53b 100644 (file)
@@ -214,6 +214,9 @@ static void driver_pgsql_disconnect(struct sql_db *_db)
 {
        struct pgsql_db *db = (struct pgsql_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);
        _db->no_reconnect = FALSE;
index 192666e8997b4fc9b8620ad31eab553913003a05..41df1a9465c6cd86e918edd15277b42b4926774f 100644 (file)
@@ -432,6 +432,17 @@ driver_sqlpool_init(const char *connect_string, const struct sql_db *driver)
        return &db->api;
 }
 
+static void driver_sqlpool_abort_requests(struct sqlpool_db *db)
+{
+       while (db->requests_head != NULL) {
+               struct sqlpool_request *request = db->requests_head;
+
+               sqlpool_request_abort(&request);
+       }
+       if (db->request_to != NULL)
+               timeout_remove(&db->request_to);
+}
+
 static void driver_sqlpool_deinit(struct sql_db *_db)
 {
        struct sqlpool_db *db = (struct sqlpool_db *)_db;
@@ -442,13 +453,7 @@ static void driver_sqlpool_deinit(struct sql_db *_db)
                sql_deinit(&conn->db);
        array_clear(&db->all_connections);
 
-       while (db->requests_head != NULL) {
-               struct sqlpool_request *request = db->requests_head;
-
-               sqlpool_request_abort(&request);
-       }
-       if (db->request_to != NULL)
-               timeout_remove(&db->request_to);
+       driver_sqlpool_abort_requests(db);
 
        array_foreach_modifiable(&db->hosts, host)
                i_free(host->connect_string);
@@ -483,6 +488,7 @@ static void driver_sqlpool_disconnect(struct sql_db *_db)
 
        array_foreach(&db->all_connections, conn)
                sql_disconnect(conn->db);
+       driver_sqlpool_abort_requests(db);
 }
 
 static const char *
index bf8bedb61a4265668cfa3668ba75aecb2cd56757..595832d96a9b87b02b05799dc124a2de59fec6ee 100644 (file)
@@ -65,7 +65,7 @@ enum sql_db_flags sql_get_flags(struct sql_db *db);
    though. Returns -1 if we're not connected, 0 if we started connecting or
    1 if we are fully connected now. */
 int sql_connect(struct sql_db *db);
-/* Explicitly disconnect from database. */
+/* Explicitly disconnect from database and abort pending auth requests. */
 void sql_disconnect(struct sql_db *db);
 
 /* Escape the given string if needed and return it. */