From: Aki Tuomi Date: Mon, 20 Oct 2025 09:19:24 +0000 (+0300) Subject: lib-sql: driver-sqlite - Handle rollback errors correctly X-Git-Tag: 2.4.2~46 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=69678ef5dcfdecec2a4e323dfd9ffc44cb213e87;p=thirdparty%2Fdovecot%2Fcore.git lib-sql: driver-sqlite - Handle rollback errors correctly Can't really claim we rolled back anything if rollback fails. --- diff --git a/src/lib-sql/driver-sqlite.c b/src/lib-sql/driver-sqlite.c index 36fe3ef1b4..73fdcf51ae 100644 --- a/src/lib-sql/driver-sqlite.c +++ b/src/lib-sql/driver-sqlite.c @@ -694,15 +694,20 @@ driver_sqlite_transaction_rollback(struct sql_transaction_context *_ctx) { struct sqlite_transaction_context *ctx = container_of(_ctx, struct sqlite_transaction_context, ctx); + struct sqlite_db *db = container_of(_ctx->db, struct sqlite_db, api); - if (SQLITE_IS_OK(ctx->rc)) { + const char *error; + int rc = driver_sqlite_exec_query(db, "ROLLBACK", &error); + if (SQLITE_IS_OK(rc)) { e_debug(sql_transaction_finished_event(_ctx)-> add_str("error", "Rolled back")->event(), "Transaction rolled back"); + } else { + e_debug(sql_transaction_finished_event(_ctx)-> + add_str("error", error)-> + add_int("error_code", rc)->event(), + "Transaction rollback failed"); } - ctx->rc = SQLITE_OK; - i_free(ctx->error); - driver_sqlite_transaction_exec(ctx, "ROLLBACK"); event_unref(&_ctx->event); i_free(ctx->error); i_free(ctx);