From bd92b570a8a3389a5e6bd86abcce2722919f8363 Mon Sep 17 00:00:00 2001
From: Ondrej Kuznik <ondrej.kuznik@acision.com>
Date: Fri, 24 Aug 2012 05:28:36 -0700
Subject: [PATCH] ITS#7369 mdb_stat: cleanup in case something went wrong.

---
 libraries/libmdb/mdb_stat.c  | 11 ++++++-----
 libraries/libmdb/mdb_stata.c | 11 ++++++-----
 2 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/libraries/libmdb/mdb_stat.c b/libraries/libmdb/mdb_stat.c
index 5832e267c7..6007510c6b 100644
--- a/libraries/libmdb/mdb_stat.c
+++ b/libraries/libmdb/mdb_stat.c
@@ -36,18 +36,17 @@ int main(int argc,char * argv[])
 	rc = mdb_env_open(env, envname, MDB_RDONLY, 0);
 	if (rc) {
 		printf("mdb_env_open failed, error %d\n", rc);
-		exit(1);
+		goto env_close;
 	}
 	rc = mdb_txn_begin(env, NULL, 1, &txn);
 	if (rc) {
 		printf("mdb_txn_begin failed, error %d\n", rc);
-		exit(1);
+		goto env_close;
 	}
 	rc = mdb_open(txn, subname, 0, &dbi);
 	if (rc) {
 		printf("mdb_open failed, error %d\n", rc);
-		mdb_txn_abort(txn);
-		exit(1);
+		goto txn_abort;
 	}
    
 	rc = mdb_stat(txn, dbi, &mst);
@@ -58,8 +57,10 @@ int main(int argc,char * argv[])
 	printf("Overflow pages: %zu\n", mst.ms_overflow_pages);
 	printf("Entries: %zu\n", mst.ms_entries);
 	mdb_close(env, dbi);
+txn_abort:
 	mdb_txn_abort(txn);
+env_close:
 	mdb_env_close(env);
 
-	return 0;
+	return rc ? EXIT_FAILURE : EXIT_SUCCESS;
 }
diff --git a/libraries/libmdb/mdb_stata.c b/libraries/libmdb/mdb_stata.c
index 62f019fe94..f8b2fe59a8 100644
--- a/libraries/libmdb/mdb_stata.c
+++ b/libraries/libmdb/mdb_stata.c
@@ -34,18 +34,17 @@ int main(int argc,char * argv[])
 	rc = mdb_env_open(env, envname, MDB_RDONLY, 0);
 	if (rc) {
 		printf("mdb_env_open failed, error %d\n", rc);
-		exit(1);
+		goto env_close;
 	}
 	rc = mdb_txn_begin(env, NULL, 1, &txn);
 	if (rc) {
 		printf("mdb_txn_begin failed, error %d\n", rc);
-		exit(1);
+		goto env_close;
 	}
 	rc = mdb_open(txn, NULL, 0, &dbi);
 	if (rc) {
 		printf("mdb_open failed, error %d\n", rc);
-		mdb_txn_abort(txn);
-		exit(1);
+		goto txn_abort;
 	}
    
 	rc = mdb_stat(txn, dbi, &mst);
@@ -76,8 +75,10 @@ int main(int argc,char * argv[])
 	}
 	mdb_cursor_close(cursor);
 	mdb_close(env, dbi);
+txn_abort:
 	mdb_txn_abort(txn);
+env_close:
 	mdb_env_close(env);
 
-	return 0;
+	return rc ? EXIT_FAILURE : EXIT_SUCCESS;
 }
-- 
GitLab