dovecot-1.0: Timeout queued queries after a while if we can't co...
dovecot at dovecot.org
dovecot at dovecot.org
Thu Aug 9 20:47:19 EEST 2007
details: http://hg.dovecot.org/dovecot-1.0/rev/e0e2a826528e
changeset: 5377:e0e2a826528e
user: Timo Sirainen <tss at iki.fi>
date: Thu Aug 09 20:38:16 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 (67 lines):
diff -r 1b6c41524c6a -r e0e2a826528e src/lib-sql/driver-pgsql.c
--- a/src/lib-sql/driver-pgsql.c Thu Aug 09 20:02:10 2007 +0300
+++ b/src/lib-sql/driver-pgsql.c Thu Aug 09 20:38:16 2007 +0300
@@ -9,6 +9,8 @@
#include <stdlib.h>
#include <time.h>
#include <libpq-fe.h>
+
+#define QUERY_TIMEOUT_SECS 6
struct pgsql_db {
struct sql_db api;
@@ -362,7 +364,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;
@@ -371,13 +373,36 @@ 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(void *context)
{
struct pgsql_db *db = context;
@@ -386,6 +411,7 @@ static void queue_timeout(void *context)
return;
if (!db->connected) {
+ queue_drop_timed_out_queries(db);
driver_pgsql_connect(&db->api);
return;
}
More information about the dovecot-cvs
mailing list