diff --git a/briar-core/src/net/sf/briar/db/Database.java b/briar-core/src/net/sf/briar/db/Database.java index 0dc1c9d360deb830ad7479b55a554cf9dc4eb7e3..5ed55973f37bc39d872c67a7e11b97a22a010c34 100644 --- a/briar-core/src/net/sf/briar/db/Database.java +++ b/briar-core/src/net/sf/briar/db/Database.java @@ -277,7 +277,7 @@ interface Database<T> { /** * Returns the headers of all messages in the given group. * <p> - * Locking: message read. + * Locking: message read, rating read. */ Collection<GroupMessageHeader> getMessageHeaders(T txn, GroupId g) throws DbException; diff --git a/briar-core/src/net/sf/briar/db/DatabaseComponentImpl.java b/briar-core/src/net/sf/briar/db/DatabaseComponentImpl.java index 15c30133520209044f7190e7234c43549dd4caff..6fa43393b25f3843d9ac753a774230702f168ca0 100644 --- a/briar-core/src/net/sf/briar/db/DatabaseComponentImpl.java +++ b/briar-core/src/net/sf/briar/db/DatabaseComponentImpl.java @@ -953,22 +953,27 @@ DatabaseCleaner.Callback { throws DbException { messageLock.readLock().lock(); try { - subscriptionLock.readLock().lock(); + ratingLock.readLock().lock(); try { - T txn = db.startTransaction(); + subscriptionLock.readLock().lock(); try { - if(!db.containsSubscription(txn, g)) - throw new NoSuchSubscriptionException(); - Collection<GroupMessageHeader> headers = - db.getMessageHeaders(txn, g); - db.commitTransaction(txn); - return headers; - } catch(DbException e) { - db.abortTransaction(txn); - throw e; + T txn = db.startTransaction(); + try { + if(!db.containsSubscription(txn, g)) + throw new NoSuchSubscriptionException(); + Collection<GroupMessageHeader> headers = + db.getMessageHeaders(txn, g); + db.commitTransaction(txn); + return headers; + } catch(DbException e) { + db.abortTransaction(txn); + throw e; + } + } finally { + subscriptionLock.readLock().unlock(); } } finally { - subscriptionLock.readLock().unlock(); + ratingLock.readLock().unlock(); } } finally { messageLock.readLock().unlock();