From cbc5fd1bb40c35e78b368cc8834442b58b8c47f8 Mon Sep 17 00:00:00 2001
From: akwizgran <akwizgran@users.sourceforge.net>
Date: Sat, 10 Dec 2011 16:53:04 +0000
Subject: [PATCH] If the reader detects a clean close, let the writer finish
 and close cleanly.

---
 .../net/sf/briar/protocol/stream/StreamConnection.java      | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/components/net/sf/briar/protocol/stream/StreamConnection.java b/components/net/sf/briar/protocol/stream/StreamConnection.java
index c4e40aa308..8bb47d2276 100644
--- a/components/net/sf/briar/protocol/stream/StreamConnection.java
+++ b/components/net/sf/briar/protocol/stream/StreamConnection.java
@@ -113,7 +113,9 @@ abstract class StreamConnection implements DatabaseListener {
 			dbExecutor.execute(new GenerateAcks());
 		} else if(e instanceof ContactRemovedEvent) {
 			ContactId c = ((ContactRemovedEvent) e).getContactId();
-			if(contactId.equals(c)) writerTasks.add(CLOSE);
+			if(contactId.equals(c)) {
+				if(!disposed.getAndSet(true)) transport.dispose(false, true);
+			}
 		} else if(e instanceof MessagesAddedEvent) {
 			if(canSendOffer.getAndSet(false))
 				dbExecutor.execute(new GenerateOffer());
@@ -172,8 +174,8 @@ abstract class StreamConnection implements DatabaseListener {
 					throw new FormatException();
 				}
 			}
+			// The writer will dispose of the transport
 			writerTasks.add(CLOSE);
-			if(!disposed.getAndSet(true)) transport.dispose(false, true);
 		} catch(DbException e) {
 			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
 			if(!disposed.getAndSet(true)) transport.dispose(true, true);
-- 
GitLab