dovecot-2.0: lib-sql: sql_disconnect() now aborts all pending re...

dovecot at dovecot.org dovecot at dovecot.org
Mon Aug 23 18:09:17 EEST 2010


details:   http://hg.dovecot.org/dovecot-2.0/rev/b88b207b79b2
changeset: 12033:b88b207b79b2
user:      Timo Sirainen <tss at iki.fi>
date:      Mon Aug 23 15:58:53 2010 +0100
description:
lib-sql: sql_disconnect() now aborts all pending requests.

diffstat:

 src/lib-sql/driver-pgsql.c   |   3 +++
 src/lib-sql/driver-sqlpool.c |  20 +++++++++++++-------
 src/lib-sql/sql-api.h        |   2 +-
 3 files changed, 17 insertions(+), 8 deletions(-)

diffs (69 lines):

diff -r 17174c55008b -r b88b207b79b2 src/lib-sql/driver-pgsql.c
--- a/src/lib-sql/driver-pgsql.c	Mon Aug 23 15:31:37 2010 +0100
+++ b/src/lib-sql/driver-pgsql.c	Mon Aug 23 15:58:53 2010 +0100
@@ -214,6 +214,9 @@
 {
 	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;
diff -r 17174c55008b -r b88b207b79b2 src/lib-sql/driver-sqlpool.c
--- a/src/lib-sql/driver-sqlpool.c	Mon Aug 23 15:31:37 2010 +0100
+++ b/src/lib-sql/driver-sqlpool.c	Mon Aug 23 15:58:53 2010 +0100
@@ -432,6 +432,17 @@
 	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 @@
 		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 @@
 
 	array_foreach(&db->all_connections, conn)
 		sql_disconnect(conn->db);
+	driver_sqlpool_abort_requests(db);
 }
 
 static const char *
diff -r 17174c55008b -r b88b207b79b2 src/lib-sql/sql-api.h
--- a/src/lib-sql/sql-api.h	Mon Aug 23 15:31:37 2010 +0100
+++ b/src/lib-sql/sql-api.h	Mon Aug 23 15:58:53 2010 +0100
@@ -65,7 +65,7 @@
    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. */


More information about the dovecot-cvs mailing list