From a2aa13051a8f81ce54e175155cf0ba70f787b93f Mon Sep 17 00:00:00 2001
From: akwizgran <akwizgran@users.sourceforge.net>
Date: Tue, 19 Nov 2013 23:23:07 +0000
Subject: [PATCH] Fixed a crash caused by trying to modify an immutable list.

---
 .../src/net/sf/briar/messaging/duplex/DuplexConnection.java | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/briar-core/src/net/sf/briar/messaging/duplex/DuplexConnection.java b/briar-core/src/net/sf/briar/messaging/duplex/DuplexConnection.java
index 97b7ad4158..747a443484 100644
--- a/briar-core/src/net/sf/briar/messaging/duplex/DuplexConnection.java
+++ b/briar-core/src/net/sf/briar/messaging/duplex/DuplexConnection.java
@@ -8,6 +8,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.security.GeneralSecurityException;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.Executor;
@@ -184,7 +185,10 @@ abstract class DuplexConnection implements DatabaseListener {
 				} else if(reader.hasRequest()) {
 					Request r = reader.readRequest();
 					if(LOG.isLoggable(INFO)) LOG.info("Received request");
-					dbExecutor.execute(new GenerateBatches(r.getMessageIds()));
+					// Make a mutable copy of the requested IDs
+					Collection<MessageId> requested = r.getMessageIds();
+					requested = new ArrayList<MessageId>(requested);
+					dbExecutor.execute(new GenerateBatches(requested));
 				} else if(reader.hasRetentionAck()) {
 					RetentionAck a = reader.readRetentionAck();
 					if(LOG.isLoggable(INFO)) LOG.info("Received retention ack");
-- 
GitLab