dovecot: Don't break if driver_pgsql_query_s() fails because we'...

dovecot at dovecot.org dovecot at dovecot.org
Mon Nov 12 19:16:34 EET 2007


details:   http://hg.dovecot.org/dovecot/rev/4d6ba6cd1bbc
changeset: 6791:4d6ba6cd1bbc
user:      Timo Sirainen <tss at iki.fi>
date:      Mon Nov 12 19:16:30 2007 +0200
description:
Don't break if driver_pgsql_query_s() fails because we're not connected.

diffstat:

1 file changed, 25 insertions(+), 14 deletions(-)
src/lib-sql/driver-pgsql.c |   39 +++++++++++++++++++++++++--------------

diffs (59 lines):

diff -r 7a985b3e6a7c -r 4d6ba6cd1bbc src/lib-sql/driver-pgsql.c
--- a/src/lib-sql/driver-pgsql.c	Mon Nov 12 19:02:14 2007 +0200
+++ b/src/lib-sql/driver-pgsql.c	Mon Nov 12 19:16:30 2007 +0200
@@ -403,21 +403,25 @@ static void queue_send_next(struct pgsql
 	i_free(queue);
 }
 
+static void queue_abort_next(struct pgsql_db *db)
+{
+	struct pgsql_queue *queue;
+
+	queue = queue_unlink_first(db);
+
+	queue->result->callback(&sql_not_connected_result,
+				queue->result->context);
+	i_free(queue->result);
+	i_free(queue->query);
+	i_free(queue);
+}
+
 static void queue_drop_timed_out_queries(struct pgsql_db *db)
 {
-	struct pgsql_queue *queue;
-
 	while (db->queue != NULL &&
-	       db->queue->created + QUERY_TIMEOUT_SECS < ioloop_time) {
-		queue = queue_unlink_first(db);
-
-		queue->result->api = sql_not_connected_result;
-		queue->result->callback(&queue->result->api,
-					queue->result->context);
-		i_free(queue->result);
-		i_free(queue->query);
-		i_free(queue);
-	}
+	       db->queue->created + QUERY_TIMEOUT_SECS < ioloop_time)
+		queue_abort_next(db);
+
 }
 
 static void queue_timeout(struct pgsql_db *db)
@@ -569,8 +573,15 @@ driver_pgsql_query_s(struct sql_db *_db,
 	db->query_finished = FALSE;
 	driver_pgsql_query(_db, query, pgsql_query_s_callback, db);
 
-	if (!db->query_finished)
-		io_loop_run(db->ioloop);
+	if (!db->query_finished) {
+		if (db->connected)
+			io_loop_run(db->ioloop);
+		else {
+			if (db->queue_to != NULL)
+				timeout_remove(&db->queue_to);
+			queue_abort_next(db);
+		}
+	}
 	io_loop_destroy(&db->ioloop);
 
 	i_assert(db->io == NULL);


More information about the dovecot-cvs mailing list