From 2e2eba820d9e5d507e6288934cedd384ff5630ff Mon Sep 17 00:00:00 2001
From: akwizgran <michael@briarproject.org>
Date: Fri, 7 Sep 2012 12:46:45 +0100
Subject: [PATCH] Handle exceptions thrown by connections' dispose() methods.

---
 .../simplex/IncomingSimplexConnection.java         |  6 +++++-
 .../simplex/OutgoingSimplexConnection.java         | 14 +++++++++++---
 .../briar/transport/ConnectionDispatcherImpl.java  | 14 +++++++++++---
 3 files changed, 27 insertions(+), 7 deletions(-)

diff --git a/components/net/sf/briar/protocol/simplex/IncomingSimplexConnection.java b/components/net/sf/briar/protocol/simplex/IncomingSimplexConnection.java
index f05e8c5ec7..a15c7bd8dd 100644
--- a/components/net/sf/briar/protocol/simplex/IncomingSimplexConnection.java
+++ b/components/net/sf/briar/protocol/simplex/IncomingSimplexConnection.java
@@ -88,7 +88,11 @@ class IncomingSimplexConnection {
 			transport.dispose(false, true);
 		} catch(IOException e) {
 			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
-			transport.dispose(true, true);
+			try {
+				transport.dispose(true, true);
+			} catch(IOException e1) {
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
+			}
 		} finally {
 			connRegistry.unregisterConnection(contactId, transportId);
 		}
diff --git a/components/net/sf/briar/protocol/simplex/OutgoingSimplexConnection.java b/components/net/sf/briar/protocol/simplex/OutgoingSimplexConnection.java
index 880f2f5584..6333a700ed 100644
--- a/components/net/sf/briar/protocol/simplex/OutgoingSimplexConnection.java
+++ b/components/net/sf/briar/protocol/simplex/OutgoingSimplexConnection.java
@@ -28,7 +28,7 @@ import net.sf.briar.api.transport.ConnectionWriterFactory;
 class OutgoingSimplexConnection {
 
 	private static final Logger LOG =
-		Logger.getLogger(OutgoingSimplexConnection.class.getName());
+			Logger.getLogger(OutgoingSimplexConnection.class.getName());
 
 	private final DatabaseComponent db;
 	private final ConnectionRegistry connRegistry;
@@ -103,10 +103,18 @@ class OutgoingSimplexConnection {
 			transport.dispose(false);
 		} catch(DbException e) {
 			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
-			transport.dispose(true);
+			try {
+				transport.dispose(true);
+			} catch(IOException e1) {
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
+			}
 		} catch(IOException e) {
 			if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
-			transport.dispose(true);
+			try {
+				transport.dispose(true);
+			} catch(IOException e1) {
+				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
+			}
 		} finally {
 			connRegistry.unregisterConnection(contactId, transportId);
 		}
diff --git a/components/net/sf/briar/transport/ConnectionDispatcherImpl.java b/components/net/sf/briar/transport/ConnectionDispatcherImpl.java
index 4adbba871f..1ac49b86b7 100644
--- a/components/net/sf/briar/transport/ConnectionDispatcherImpl.java
+++ b/components/net/sf/briar/transport/ConnectionDispatcherImpl.java
@@ -27,7 +27,7 @@ import com.google.inject.Inject;
 class ConnectionDispatcherImpl implements ConnectionDispatcher {
 
 	private static final Logger LOG =
-		Logger.getLogger(ConnectionDispatcherImpl.class.getName());
+			Logger.getLogger(ConnectionDispatcherImpl.class.getName());
 
 	private final Executor connExecutor;
 	private final ConnectionRecogniser recogniser;
@@ -96,10 +96,18 @@ class ConnectionDispatcherImpl implements ConnectionDispatcher {
 						transport);
 			} catch(DbException e) {
 				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
-				transport.dispose(true, false);
+				try {
+					transport.dispose(true, false);
+				} catch(IOException e1) {
+					if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
+				}
 			} catch(IOException e) {
 				if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
-				transport.dispose(true, false);
+				try {
+					transport.dispose(true, false);
+				} catch(IOException e1) {
+					if(LOG.isLoggable(Level.WARNING)) LOG.warning(e.toString());
+				}
 			}
 		}
 	}
-- 
GitLab