From 00df158ad6f03ed1a2d3a3f2f9c4c19c6a9df2d2 Mon Sep 17 00:00:00 2001
From: akwizgran <akwizgran@users.sourceforge.net>
Date: Tue, 6 Dec 2011 00:03:05 +0000
Subject: [PATCH] Ensure semaphore is released if an exception is thrown.

---
 .../transport/batch/IncomingBatchConnection.java  | 12 ++++++++----
 .../briar/transport/stream/StreamConnection.java  | 15 ++++++++++-----
 2 files changed, 18 insertions(+), 9 deletions(-)

diff --git a/components/net/sf/briar/transport/batch/IncomingBatchConnection.java b/components/net/sf/briar/transport/batch/IncomingBatchConnection.java
index cf8e00d04e..e1a5082f06 100644
--- a/components/net/sf/briar/transport/batch/IncomingBatchConnection.java
+++ b/components/net/sf/briar/transport/batch/IncomingBatchConnection.java
@@ -72,8 +72,9 @@ class IncomingBatchConnection {
 							} catch(DbException e) {
 								if(LOG.isLoggable(Level.WARNING))
 									LOG.warning(e.getMessage());
+							} finally {
+								semaphore.release();
 							}
-							semaphore.release();
 						}
 					});
 				} else if(proto.hasBatch()) {
@@ -90,8 +91,9 @@ class IncomingBatchConnection {
 							} catch(GeneralSecurityException e) {
 								if(LOG.isLoggable(Level.WARNING))
 									LOG.warning(e.getMessage());
+							} finally {
+								semaphore.release();
 							}
-							semaphore.release();
 						}
 					});
 				} else if(proto.hasSubscriptionUpdate()) {
@@ -105,8 +107,9 @@ class IncomingBatchConnection {
 							} catch(DbException e) {
 								if(LOG.isLoggable(Level.WARNING))
 									LOG.warning(e.getMessage());
+							} finally {
+								semaphore.release();
 							}
-							semaphore.release();
 						}
 					});
 				} else if(proto.hasTransportUpdate()) {
@@ -120,8 +123,9 @@ class IncomingBatchConnection {
 							} catch(DbException e) {
 								if(LOG.isLoggable(Level.WARNING))
 									LOG.warning(e.getMessage());
+							} finally {
+								semaphore.release();
 							}
-							semaphore.release();
 						}
 					});
 				} else {
diff --git a/components/net/sf/briar/transport/stream/StreamConnection.java b/components/net/sf/briar/transport/stream/StreamConnection.java
index 17839b393b..8e1cf6730c 100644
--- a/components/net/sf/briar/transport/stream/StreamConnection.java
+++ b/components/net/sf/briar/transport/stream/StreamConnection.java
@@ -140,8 +140,9 @@ abstract class StreamConnection implements DatabaseListener {
 							} catch(DbException e) {
 								if(LOG.isLoggable(Level.WARNING))
 									LOG.warning(e.getMessage());
+							} finally {
+								semaphore.release();
 							}
-							semaphore.release();
 						}
 					});
 				} else if(proto.hasBatch()) {
@@ -158,8 +159,9 @@ abstract class StreamConnection implements DatabaseListener {
 							} catch(GeneralSecurityException e) {
 								if(LOG.isLoggable(Level.WARNING))
 									LOG.warning(e.getMessage());
+							} finally {
+								semaphore.release();
 							}
-							semaphore.release();
 						}
 					});
 				} else if(proto.hasOffer()) {
@@ -200,8 +202,9 @@ abstract class StreamConnection implements DatabaseListener {
 							} catch(DbException e) {
 								if(LOG.isLoggable(Level.WARNING))
 									LOG.warning(e.getMessage());
+							} finally {
+								semaphore.release();
 							}
-							semaphore.release();
 						}
 					});
 					// Store the requested message IDs and notify the writer
@@ -223,8 +226,9 @@ abstract class StreamConnection implements DatabaseListener {
 							} catch(DbException e) {
 								if(LOG.isLoggable(Level.WARNING))
 									LOG.warning(e.getMessage());
+							} finally {
+								semaphore.release();
 							}
-							semaphore.release();
 						}
 					});
 				} else if(proto.hasTransportUpdate()) {
@@ -238,8 +242,9 @@ abstract class StreamConnection implements DatabaseListener {
 							} catch(DbException e) {
 								if(LOG.isLoggable(Level.WARNING))
 									LOG.warning(e.getMessage());
+							} finally {
+								semaphore.release();
 							}
-							semaphore.release();
 						}
 					});
 				} else {
-- 
GitLab