From: Aki Tuomi Date: Fri, 17 Sep 2021 07:02:09 +0000 (+0300) Subject: lib-sql: driver-sqlite - Fix synchronous transaction commit X-Git-Tag: 2.4.0~4728 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c4eeea75f4f555cdceca7b3ce79b87a70e139969;p=thirdparty%2Fdovecot%2Fcore.git 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. --- 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; }