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