dovecot: Timeout queued queries after a while if we can't connec...
dovecot at dovecot.org
dovecot at dovecot.org
Thu Aug 9 20:47:16 EEST 2007
details: http://hg.dovecot.org/dovecot/rev/3200be63749b
changeset: 6251:3200be63749b
user: Timo Sirainen <tss at iki.fi>
date: Thu Aug 09 20:38:17 2007 +0300
description:
Timeout queued queries after a while if we can't connect to server.
diffstat:
1 file changed, 28 insertions(+), 2 deletions(-)
src/lib-sql/driver-pgsql.c | 30 ++++++++++++++++++++++++++++--
diffs (66 lines):
diff -r a5db1b4bc02c -r 3200be63749b src/lib-sql/driver-pgsql.c
--- a/src/lib-sql/driver-pgsql.c Thu Aug 09 20:00:42 2007 +0300
+++ b/src/lib-sql/driver-pgsql.c Thu Aug 09 20:38:17 2007 +0300
@@ -10,6 +10,8 @@
#include <stdlib.h>
#include <time.h>
#include <libpq-fe.h>
+
+#define QUERY_TIMEOUT_SECS 6
struct pgsql_db {
struct sql_db api;
@@ -376,7 +378,7 @@ static void send_query(struct pgsql_resu
}
}
-static void queue_send_next(struct pgsql_db *db)
+static struct pgsql_queue *queue_unlink_first(struct pgsql_db *db)
{
struct pgsql_queue *queue;
@@ -385,19 +387,43 @@ static void queue_send_next(struct pgsql
if (db->queue == NULL)
db->queue_tail = &db->queue;
-
+ return queue;
+}
+
+static void queue_send_next(struct pgsql_db *db)
+{
+ struct pgsql_queue *queue;
+
+ queue = queue_unlink_first(db);
send_query(queue->result, queue->query);
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->query);
+ i_free(queue);
+ }
+}
+
static void queue_timeout(struct pgsql_db *db)
{
if (db->querying)
return;
if (!db->connected) {
+ queue_drop_timed_out_queries(db);
driver_pgsql_connect(&db->api);
return;
}
More information about the dovecot-cvs
mailing list