diff --git a/briar-core/src/org/briarproject/db/Database.java b/briar-core/src/org/briarproject/db/Database.java index 130c4f1c3f09ecc4f3da410b448b599f384cd646..e269178b9ef739aa90e219d7ce65952fbd2dfaad 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 2ae0579b0147ca065ee7de748b98f33c03f53487..c7f375fe6b7fe81285774c7bf0aa77eadbc4cc52 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();