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;