From 4738294fd7dbc7f48daa243949f961e8c68dcdf4 Mon Sep 17 00:00:00 2001
From: Howard Chu <hyc@symas.com>
Date: Sat, 21 Jan 2012 08:20:43 -0800
Subject: [PATCH] txn_commit must abort txn before returning errors

Fix for failure when committing a txn that is a child of
some parent txn.
---
 libraries/libmdb/mdb.c | 4 +++-
 libraries/libmdb/mdb.h | 1 +
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/libraries/libmdb/mdb.c b/libraries/libmdb/mdb.c
index 9480a4339e..cd0e810bae 100644
--- a/libraries/libmdb/mdb.c
+++ b/libraries/libmdb/mdb.c
@@ -1737,8 +1737,10 @@ mdb_txn_commit(MDB_txn *txn)
 		}
 		x = dst[0].mid;
 		for (; y<=src[0].mid; y++) {
-			if (++x >= MDB_IDL_UM_MAX)
+			if (++x >= MDB_IDL_UM_MAX) {
+				mdb_txn_abort(txn);
 				return ENOMEM;
+			}
 			dst[x] = src[y];
 		}
 		dst[0].mid = x;
diff --git a/libraries/libmdb/mdb.h b/libraries/libmdb/mdb.h
index c40a5e9e28..5682c8f868 100644
--- a/libraries/libmdb/mdb.h
+++ b/libraries/libmdb/mdb.h
@@ -530,6 +530,7 @@ int  mdb_txn_begin(MDB_env *env, MDB_txn *parent, unsigned int flags, MDB_txn **
 	 *	<li>EINVAL - an invalid parameter was specified.
 	 *	<li>ENOSPC - no more disk space.
 	 *	<li>EIO - a low-level I/O error occurred while writing.
+	 *	<li>ENOMEM - the transaction is nested and could not be merged into its parent.
 	 * </ul>
 	 */
 int  mdb_txn_commit(MDB_txn *txn);
-- 
GitLab