From 1cbaae07348c191424e9884d6989ad464c33fe6f Mon Sep 17 00:00:00 2001
From: akwizgran <akwizgran@users.sourceforge.net>
Date: Thu, 27 Feb 2014 12:49:57 +0000
Subject: [PATCH] Database.setInboxGroup() doesn't require message lock.

---
 .../src/org/briarproject/db/Database.java     |  2 +-
 .../db/DatabaseComponentImpl.java             | 25 ++++++++-----------
 2 files changed, 11 insertions(+), 16 deletions(-)

diff --git a/briar-core/src/org/briarproject/db/Database.java b/briar-core/src/org/briarproject/db/Database.java
index 130c4f1c3f..e269178b9e 100644
--- a/briar-core/src/org/briarproject/db/Database.java
+++ b/briar-core/src/org/briarproject/db/Database.java
@@ -712,7 +712,7 @@ interface Database<T> {
 	 * Makes a group visible to the given contact, adds it to the contact's
 	 * subscriptions, and sets it as the inbox group for the contact.
 	 * <p>
-	 * Locking: contact read, message write, subscription write.
+	 * Locking: subscription write.
 	 */
 	public void setInboxGroup(T txn, ContactId c, Group g) throws DbException;
 
diff --git a/briar-core/src/org/briarproject/db/DatabaseComponentImpl.java b/briar-core/src/org/briarproject/db/DatabaseComponentImpl.java
index 2ae0579b01..c7f375fe6b 100644
--- a/briar-core/src/org/briarproject/db/DatabaseComponentImpl.java
+++ b/briar-core/src/org/briarproject/db/DatabaseComponentImpl.java
@@ -1770,25 +1770,20 @@ DatabaseCleaner.Callback {
 	public void setInboxGroup(ContactId c, Group g) throws DbException {
 		contactLock.readLock().lock();
 		try {
-			messageLock.writeLock().lock();
+			subscriptionLock.writeLock().lock();
 			try {
-				subscriptionLock.writeLock().lock();
+				T txn = db.startTransaction();
 				try {
-					T txn = db.startTransaction();
-					try {
-						if(!db.containsContact(txn, c))
-							throw new NoSuchContactException();
-						db.setInboxGroup(txn, c, g);
-						db.commitTransaction(txn);
-					} catch(DbException e) {
-						db.abortTransaction(txn);
-						throw e;
-					}
-				} finally {
-					subscriptionLock.writeLock().unlock();
+					if(!db.containsContact(txn, c))
+						throw new NoSuchContactException();
+					db.setInboxGroup(txn, c, g);
+					db.commitTransaction(txn);
+				} catch(DbException e) {
+					db.abortTransaction(txn);
+					throw e;
 				}
 			} finally {
-				messageLock.writeLock().unlock();
+				subscriptionLock.writeLock().unlock();
 			}
 		} finally {
 			contactLock.readLock().unlock();
-- 
GitLab