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