Mercurial > dovecot > original-hg > dovecot-2.2
changeset 6791:4d6ba6cd1bbc HEAD
Don't break if driver_pgsql_query_s() fails because we're not connected.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 12 Nov 2007 19:16:30 +0200 |
parents | 7a985b3e6a7c |
children | 7005fc7e69dc |
files | src/lib-sql/driver-pgsql.c |
diffstat | 1 files changed, 24 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- 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 @@ i_free(queue); } -static void queue_drop_timed_out_queries(struct pgsql_db *db) +static void queue_abort_next(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 = 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); - } + 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) +{ + while (db->queue != NULL && + db->queue->created + QUERY_TIMEOUT_SECS < ioloop_time) + queue_abort_next(db); + } static void queue_timeout(struct pgsql_db *db) @@ -569,8 +573,15 @@ 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);