From c4eeea75f4f555cdceca7b3ce79b87a70e139969 Mon Sep 17 00:00:00 2001 From: Aki Tuomi Date: Fri, 17 Sep 2021 10:02:09 +0300 Subject: [PATCH] lib-sql: driver-sqlite - Fix synchronous transaction commit It was not sending ROLLBACK on error, and leaked an event. Now it works same way as asynchronous commit. --- src/lib-sql/driver-sqlite.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/lib-sql/driver-sqlite.c b/src/lib-sql/driver-sqlite.c index a448db356e..65a0eed324 100644 --- a/src/lib-sql/driver-sqlite.c +++ b/src/lib-sql/driver-sqlite.c @@ -507,6 +507,16 @@ driver_sqlite_transaction_commit_s(struct sql_transaction_context *_ctx, sql_exec(_ctx->db, "COMMIT"); *error_r = sqlite3_errmsg(db->sqlite); + if (db->rc != SQLITE_OK) { + e_debug(sql_transaction_finished_event(_ctx)-> + add_str("error", *error_r)->event(), + "Transaction failed"); + sql_exec(_ctx->db, "ROLLBACK"); + } else { + e_debug(sql_transaction_finished_event(_ctx)->event(), + "Transaction committed"); + } + event_unref(&_ctx->event); i_free(ctx); return 0; } -- 2.47.3