diff --git a/src/lmdb/database.cpp b/src/lmdb/database.cpp index 22569fcf08..0da88622a6 100644 --- a/src/lmdb/database.cpp +++ b/src/lmdb/database.cpp @@ -179,9 +179,10 @@ namespace lmdb expect database::commit(write_txn txn) noexcept { MONERO_PRECOND(txn != nullptr); - MONERO_LMDB_CHECK(mdb_txn_commit(txn.get())); - txn.release(); + const int err = mdb_txn_commit(txn.release()); release_context(ctx); + if (err) + return {lmdb::error(err)}; return success(); } } // lmdb diff --git a/src/lmdb/database.h b/src/lmdb/database.h index 0f12571da0..608bc45719 100644 --- a/src/lmdb/database.h +++ b/src/lmdb/database.h @@ -123,10 +123,13 @@ namespace lmdb const auto wrote = f(*(*txn)); if (wrote) { - MONERO_CHECK(commit(std::move(*txn))); - return wrote; + const auto committed = commit(std::move(*txn)); + if (committed) + return wrote; + if (committed != lmdb::error(MDB_MAP_FULL)) + return committed.error(); } - if (wrote != lmdb::error(MDB_MAP_FULL)) + else if (wrote != lmdb::error(MDB_MAP_FULL)) return wrote; txn->reset();