Mercurial > dovecot > core-2.2
changeset 20478:84191902a866
dict-client: If commit fails to send BEGIN, don't try sending anything else.
Fixes memory leak and also fixes overwriting the original error message.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Fri, 01 Jul 2016 11:41:51 +0300 |
parents | 1173fef0844a |
children | 0fd0da4a3cfb |
files | src/lib-dict/dict-client.c |
diffstat | 1 files changed, 9 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-dict/dict-client.c Fri Jul 01 11:12:03 2016 +0300 +++ b/src/lib-dict/dict-client.c Fri Jul 01 11:41:51 2016 +0300 @@ -259,7 +259,7 @@ } } -static void +static bool client_dict_transaction_send_begin(struct client_dict_transaction_context *ctx) { struct client_dict *dict = (struct client_dict *)ctx->ctx.dict; @@ -275,8 +275,11 @@ cmd = client_dict_cmd_init(dict, query); cmd->no_replies = TRUE; cmd->retry_errors = TRUE; - if (!client_dict_cmd_send(dict, &cmd, &error)) + if (!client_dict_cmd_send(dict, &cmd, &error)) { ctx->error = i_strdup(error); + return FALSE; + } + return TRUE; } static void @@ -290,8 +293,10 @@ if (ctx->error != NULL) return; - if (!ctx->sent_begin) - client_dict_transaction_send_begin(ctx); + if (!ctx->sent_begin) { + if (!client_dict_transaction_send_begin(ctx)) + return; + } cmd = client_dict_cmd_init(dict, query); cmd->no_replies = TRUE;