From a94867907fcd81bf8db60ed7ea58f0fe88a028ef Mon Sep 17 00:00:00 2001 From: akwizgran <michael@briarproject.org> Date: Fri, 15 Mar 2013 16:52:56 +0000 Subject: [PATCH] Getting group message headers requires acquiring rating lock. --- briar-core/src/net/sf/briar/db/Database.java | 2 +- .../sf/briar/db/DatabaseComponentImpl.java | 29 +++++++++++-------- 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/briar-core/src/net/sf/briar/db/Database.java b/briar-core/src/net/sf/briar/db/Database.java index 0dc1c9d360..5ed55973f3 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 15c3013352..6fa43393b2 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(); -- GitLab