You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by hu...@apache.org on 2014/09/16 09:27:30 UTC
git commit: updated refs/heads/bugfix/CID-116538 to 1760a60
Repository: cloudstack
Updated Branches:
refs/heads/bugfix/CID-116538 [created] 1760a60eb
Fix resource leaks on exception paths
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/1760a60e
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/1760a60e
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/1760a60e
Branch: refs/heads/bugfix/CID-116538
Commit: 1760a60ebc4cab1cf29430576af052957add7495
Parents: 50990c4
Author: Hugo Trippaers <ht...@schubergphilis.com>
Authored: Tue Sep 16 09:27:05 2014 +0200
Committer: Hugo Trippaers <ht...@schubergphilis.com>
Committed: Tue Sep 16 09:27:05 2014 +0200
----------------------------------------------------------------------
utils/src/com/cloud/utils/nio/Link.java | 7 +++--
utils/src/com/cloud/utils/nio/NioClient.java | 36 ++++++++---------------
utils/src/com/cloud/utils/nio/NioServer.java | 11 +++----
3 files changed, 23 insertions(+), 31 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1760a60e/utils/src/com/cloud/utils/nio/Link.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/nio/Link.java b/utils/src/com/cloud/utils/nio/Link.java
index 36a8e60..e4291d0 100755
--- a/utils/src/com/cloud/utils/nio/Link.java
+++ b/utils/src/com/cloud/utils/nio/Link.java
@@ -31,6 +31,7 @@ import java.nio.channels.ClosedChannelException;
import java.nio.channels.ReadableByteChannel;
import java.nio.channels.SelectionKey;
import java.nio.channels.SocketChannel;
+import java.security.GeneralSecurityException;
import java.security.KeyStore;
import java.util.Properties;
import java.util.concurrent.ConcurrentLinkedQueue;
@@ -159,7 +160,7 @@ public class Link {
pkgBuf.clear();
engResult = sslEngine.wrap(buffers, pkgBuf);
if (engResult.getHandshakeStatus() != HandshakeStatus.FINISHED && engResult.getHandshakeStatus() != HandshakeStatus.NOT_HANDSHAKING &&
- engResult.getStatus() != SSLEngineResult.Status.OK) {
+ engResult.getStatus() != SSLEngineResult.Status.OK) {
throw new IOException("SSL: SSLEngine return bad result! " + engResult);
}
@@ -285,7 +286,7 @@ public class Link {
appBuf = ByteBuffer.allocate(sslSession.getApplicationBufferSize() + 40);
engResult = _sslEngine.unwrap(_readBuffer, appBuf);
if (engResult.getHandshakeStatus() != HandshakeStatus.FINISHED && engResult.getHandshakeStatus() != HandshakeStatus.NOT_HANDSHAKING &&
- engResult.getStatus() != SSLEngineResult.Status.OK) {
+ engResult.getStatus() != SSLEngineResult.Status.OK) {
throw new IOException("SSL: SSLEngine return bad result! " + engResult);
}
if (remaining == _readBuffer.remaining()) {
@@ -405,7 +406,7 @@ public class Link {
_connection.scheduleTask(task);
}
- public static SSLContext initSSLContext(boolean isClient) throws Exception {
+ public static SSLContext initSSLContext(boolean isClient) throws GeneralSecurityException, IOException {
InputStream stream;
SSLContext sslContext = null;
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1760a60e/utils/src/com/cloud/utils/nio/NioClient.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/nio/NioClient.java b/utils/src/com/cloud/utils/nio/NioClient.java
index 34d03c2..f4b1029 100755
--- a/utils/src/com/cloud/utils/nio/NioClient.java
+++ b/utils/src/com/cloud/utils/nio/NioClient.java
@@ -24,6 +24,7 @@ import java.net.InetSocketAddress;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.SocketChannel;
+import java.security.GeneralSecurityException;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLEngine;
@@ -48,30 +49,23 @@ public class NioClient extends NioConnection {
@Override
protected void init() throws IOException {
_selector = Selector.open();
- SocketChannel sch = null;
- InetSocketAddress addr = null;
+ Task task = null;
- try {
- sch = SocketChannel.open();
+ try (SocketChannel sch = SocketChannel.open()) {
sch.configureBlocking(true);
s_logger.info("Connecting to " + _host + ":" + _port);
if (_bindAddress != null) {
s_logger.info("Binding outbound interface at " + _bindAddress);
- addr = new InetSocketAddress(_bindAddress, 0);
- sch.socket().bind(addr);
+ InetSocketAddress bindAddr = new InetSocketAddress(_bindAddress, 0);
+ sch.socket().bind(bindAddr);
}
- addr = new InetSocketAddress(_host, _port);
- sch.connect(addr);
- } catch (IOException e) {
- _selector.close();
- throw e;
- }
+ InetSocketAddress peerAddr = new InetSocketAddress(_host, _port);
+ sch.connect(peerAddr);
- SSLEngine sslEngine = null;
- try {
+ SSLEngine sslEngine = null;
// Begin SSL handshake in BLOCKING mode
sch.configureBlocking(true);
@@ -82,15 +76,10 @@ public class NioClient extends NioConnection {
Link.doHandshake(sch, sslEngine, true);
s_logger.info("SSL: Handshake done");
s_logger.info("Connected to " + _host + ":" + _port);
- } catch (Exception e) {
- _selector.close();
- throw new IOException("SSL: Fail to init SSL! " + e);
- }
- Task task = null;
- try {
+
sch.configureBlocking(false);
- Link link = new Link(addr, this);
+ Link link = new Link(peerAddr, this);
link.setSSLEngine(sslEngine);
SelectionKey key = sch.register(_selector, SelectionKey.OP_READ);
link.setKey(key);
@@ -98,9 +87,10 @@ public class NioClient extends NioConnection {
// Notice we've already connected due to the handshake, so let's get the
// remaining task done
task = _factory.create(Task.Type.CONNECT, link, null);
- } catch (Exception e) {
+ } catch (GeneralSecurityException e) {
+ throw new IOException("Failed to initialise security", e);
+ } finally {
_selector.close();
- throw new IOException("Fail to init NioClient! " + e);
}
_executor.execute(task);
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/1760a60e/utils/src/com/cloud/utils/nio/NioServer.java
----------------------------------------------------------------------
diff --git a/utils/src/com/cloud/utils/nio/NioServer.java b/utils/src/com/cloud/utils/nio/NioServer.java
index 50c33c8..2c640b3 100755
--- a/utils/src/com/cloud/utils/nio/NioServer.java
+++ b/utils/src/com/cloud/utils/nio/NioServer.java
@@ -46,13 +46,14 @@ public class NioServer extends NioConnection {
protected void init() throws IOException {
_selector = SelectorProvider.provider().openSelector();
- ServerSocketChannel ssc = ServerSocketChannel.open();
- ssc.configureBlocking(false);
+ try (ServerSocketChannel ssc = ServerSocketChannel.open()) {
+ ssc.configureBlocking(false);
- _localAddr = new InetSocketAddress(_port);
- ssc.socket().bind(_localAddr);
+ _localAddr = new InetSocketAddress(_port);
+ ssc.socket().bind(_localAddr);
- ssc.register(_selector, SelectionKey.OP_ACCEPT, null);
+ ssc.register(_selector, SelectionKey.OP_ACCEPT, null);
+ }
s_logger.info("NioConnection started and listening on " + _localAddr.toString());
}