]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-sql: driver-sqlite - Fix synchronous transaction commit
authorAki Tuomi <aki.tuomi@open-xchange.com>
Fri, 17 Sep 2021 07:02:09 +0000 (10:02 +0300)
committerAki Tuomi <aki.tuomi@open-xchange.com>
Mon, 17 Jan 2022 11:52:09 +0000 (13:52 +0200)
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

index a448db356ef6aa702f94c694c31cf9dd9f7d3834..65a0eed3247f27243ff041b3d9a41251f0a04bab 100644 (file)
@@ -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;
 }