diff --git a/src/core.c b/src/core.c index f7bfef63..d609222d 100644 --- a/src/core.c +++ b/src/core.c @@ -7869,24 +7869,23 @@ static int mdbx_flush_iov(MDBX_txn *const txn, struct iovec *iov, size_t iov_bytes) { MDBX_env *const env = txn->mt_env; mdbx_assert(env, iov_items > 0); + int rc; if (likely(iov_items == 1)) { mdbx_assert(env, iov->iov_len == iov_bytes); - int rc = mdbx_pwrite(env->me_lazy_fd, iov->iov_base, iov_bytes, iov_off); - mdbx_dpage_free(env, (MDBX_page *)iov->iov_base, - bytes2pgno(env, iov_bytes)); - return rc; + rc = mdbx_pwrite(env->me_lazy_fd, iov->iov_base, iov_bytes, iov_off); } else { - int rc = mdbx_pwritev(env->me_lazy_fd, iov, iov_items, iov_off, iov_bytes); - if (unlikely(rc != MDBX_SUCCESS)) { - mdbx_error("Write error: %s", mdbx_strerror(rc)); - txn->mt_flags |= MDBX_TXN_ERROR; - } - - for (unsigned i = 0; i < iov_items; i++) - mdbx_dpage_free(env, (MDBX_page *)iov[i].iov_base, - bytes2pgno(env, iov[i].iov_len)); - return rc; + rc = mdbx_pwritev(env->me_lazy_fd, iov, iov_items, iov_off, iov_bytes); } + + if (unlikely(rc != MDBX_SUCCESS)) { + mdbx_error("Write error: %s", mdbx_strerror(rc)); + txn->mt_flags |= MDBX_TXN_ERROR; + } + + for (unsigned i = 0; i < iov_items; i++) + mdbx_dpage_free(env, (MDBX_page *)iov[i].iov_base, + bytes2pgno(env, iov[i].iov_len)); + return rc; } /* Flush (some) dirty pages to the map, after clearing their dirty flag.