From 98148085b6ebed0630c366877247c44fad958c03 Mon Sep 17 00:00:00 2001
From: akwizgran <akwizgran@users.sourceforge.net>
Date: Wed, 23 Nov 2011 12:13:51 +0000
Subject: [PATCH] Don't lock the list of listeners while calling them.

---
 .../net/sf/briar/db/DatabaseComponentImpl.java      | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/components/net/sf/briar/db/DatabaseComponentImpl.java b/components/net/sf/briar/db/DatabaseComponentImpl.java
index 92420cca1d..56b9f82532 100644
--- a/components/net/sf/briar/db/DatabaseComponentImpl.java
+++ b/components/net/sf/briar/db/DatabaseComponentImpl.java
@@ -198,14 +198,15 @@ DatabaseCleaner.Callback {
 
 	/** Notifies all listeners of a database event. */
 	private void callListeners(DatabaseEvent e) {
+		List<DatabaseListener> copy;
 		synchronized(listeners) {
-			if(!listeners.isEmpty()) {
-				// Shuffle the listeners so we don't always send new messages
-				// to contacts in the same order
-				Collections.shuffle(listeners);
-				for(DatabaseListener d : listeners) d.eventOccurred(e);
-			}
+			if(listeners.isEmpty()) return;
+			copy = new ArrayList<DatabaseListener>(listeners);
 		}
+		// Shuffle the listeners so we don't always send new messages
+		// to contacts in the same order
+		Collections.shuffle(copy);
+		for(DatabaseListener d : copy) d.eventOccurred(e);
 	}
 
 	public void addLocalGroupMessage(Message m) throws DbException {
-- 
GitLab