Don't lock the list of listeners while calling them.

This commit is contained in:
akwizgran
2011-11-23 12:13:51 +00:00
parent 046becd388
commit 98148085b6

View File

@@ -198,14 +198,15 @@ DatabaseCleaner.Callback {
/** Notifies all listeners of a database event. */ /** Notifies all listeners of a database event. */
private void callListeners(DatabaseEvent e) { private void callListeners(DatabaseEvent e) {
List<DatabaseListener> copy;
synchronized(listeners) { synchronized(listeners) {
if(!listeners.isEmpty()) { if(listeners.isEmpty()) return;
// Shuffle the listeners so we don't always send new messages copy = new ArrayList<DatabaseListener>(listeners);
// to contacts in the same order
Collections.shuffle(listeners);
for(DatabaseListener d : listeners) d.eventOccurred(e);
}
} }
// 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 { public void addLocalGroupMessage(Message m) throws DbException {