From 66417aa67b2a0ca0624daab3e64d1850aff3c9a2 Mon Sep 17 00:00:00 2001 From: Timo Sirainen Date: Mon, 25 Jul 2016 17:41:36 -0400 Subject: [PATCH] dict-client: Don't keep a request timeout when there are only background commands. --- src/lib-dict/dict-client.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/lib-dict/dict-client.c b/src/lib-dict/dict-client.c index 2f4de277db..504ed9f0a8 100644 --- a/src/lib-dict/dict-client.c +++ b/src/lib-dict/dict-client.c @@ -272,7 +272,7 @@ client_dict_cmd_send(struct client_dict *dict, struct client_dict_cmd **_cmd, *error_r = error; return FALSE; } else { - if (dict->to_requests == NULL) { + if (dict->to_requests == NULL && !cmd->background) { dict->to_requests = timeout_add(DICT_CLIENT_REQUEST_TIMEOUT_MSECS, client_dict_input_timeout, dict); @@ -355,6 +355,21 @@ static void client_dict_add_timeout(struct client_dict *dict) } } +static void client_dict_cmd_backgrounded(struct client_dict *dict) +{ + struct client_dict_cmd *const *cmdp; + + if (dict->to_requests == NULL) + return; + + array_foreach(&dict->cmds, cmdp) { + if (!(*cmdp)->background) + return; + } + /* we only have background-commands. remove the request timeout. */ + timeout_remove(&dict->to_requests); +} + static int dict_conn_input_line(struct connection *_conn, const char *line) { struct dict_connection *conn = (struct dict_connection *)_conn; @@ -799,8 +814,10 @@ client_dict_iter_async_callback(struct client_dict_cmd *cmd, const char *line, struct client_dict_iter_result *result; const char *key = NULL, *value = NULL; - if (ctx->deinit) + if (ctx->deinit) { cmd->background = TRUE; + client_dict_cmd_backgrounded(dict); + } if (error != NULL) { /* failed */ -- 2.47.3