{
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;
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;
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);
array_foreach(&db->all_connections, conn)
sql_disconnect(conn->db);
+ driver_sqlpool_abort_requests(db);
}
static const char *
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. */