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