From 1a09a645c82e07fee8d42642a83652c6c85473ff Mon Sep 17 00:00:00 2001
From: Alan Hicks <ahicks@p-o.co.uk>
Date: Mon, 31 Oct 2016 18:27:45 +0000
Subject: [PATCH 26/33] Rebalance commit/rollback

---
 src/dm_mailboxstate.c | 9 ++++++---
 src/imapcommands.c    | 1 +
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git src/dm_mailboxstate.c src/dm_mailboxstate.c
index 723689a..c04b6d7 100644
--- src/dm_mailboxstate.c
+++ src/dm_mailboxstate.c
@@ -212,11 +212,12 @@ T MailboxState_new(Mempool_T pool, uint64_t id)
 		db_begin_transaction(c); // we need read-committed isolation
 		state_load_metadata(M, c);
 		state_load_messages(M, c);
+		db_commit_transaction(c);
 	CATCH(SQLException)
 		LOG_SQLERROR;
+		db_rollback_transaction(c);
 		t = DM_EQUERY;
 	FINALLY
-		db_commit_transaction(c);
 		db_con_close(c);
 	END_TRY;
 
@@ -888,11 +889,12 @@ int MailboxState_info(T M)
 	TRY
 		db_begin_transaction(c);
 		db_getmailbox_info(M, c);
+		db_commit_transaction(c);
 	CATCH(SQLException)
 		LOG_SQLERROR;
+		db_rollback_transaction(c);
 		t = DM_EQUERY;
 	FINALLY
-		db_commit_transaction(c);
 		db_con_close(c);
 	END_TRY;
 
@@ -928,11 +930,12 @@ int MailboxState_count(T M)
 	TRY
 		db_begin_transaction(c);
 		db_getmailbox_count(M, c);
+		db_commit_transaction(c);
 	CATCH(SQLException)
 		LOG_SQLERROR;
+		db_rollback_transaction(c);
 		t = DM_EQUERY;
 	FINALLY
-		db_commit_transaction(c);
 		db_con_close(c);
 	END_TRY;
 
diff --git src/imapcommands.c src/imapcommands.c
index bdedb4a..43760fc 100644
--- src/imapcommands.c
+++ src/imapcommands.c
@@ -946,6 +946,7 @@ void _ic_delete_enter(dm_thread_data *D)
 				db_commit_transaction(c);
 			CATCH(SQLException)
 				LOG_SQLERROR;
+				db_rollback_transaction(c);
 				t = DM_EQUERY;
 			FINALLY
 				db_con_close(c);
-- 
2.10.1 (Apple Git-78)

