JSSE: close WolfSSLInput/OutputStream when SSLSocket.close() is called, allows stream objects to be garbage collected more easily
parent
e0d718e9b3
commit
c5304ebb19
|
@ -1890,6 +1890,9 @@ public class WolfSSLSocket extends SSLSocket {
|
|||
|
||||
this.connectionClosed = true;
|
||||
|
||||
/* Release native verify callback (JNI global) */
|
||||
this.EngineHelper.unsetVerifyCallback();
|
||||
|
||||
/* Connection is closed, free native WOLFSSL session
|
||||
* to release native memory earlier than garbage
|
||||
* collector might with finalize(). */
|
||||
|
@ -1905,6 +1908,17 @@ public class WolfSSLSocket extends SSLSocket {
|
|||
"calling this.ssl.freeSSL()");
|
||||
this.ssl.freeSSL();
|
||||
this.ssl = null;
|
||||
|
||||
/* Release Input/OutputStream objects */
|
||||
if (this.inStream != null) {
|
||||
this.inStream.close();
|
||||
this.inStream = null;
|
||||
}
|
||||
if (this.outStream != null) {
|
||||
this.outStream.close();
|
||||
this.outStream = null;
|
||||
}
|
||||
|
||||
} /* handshakeLock */
|
||||
|
||||
WolfSSLDebug.log(getClass(), WolfSSLDebug.INFO,
|
||||
|
@ -2326,13 +2340,20 @@ public class WolfSSLSocket extends SSLSocket {
|
|||
|
||||
private WolfSSLSession ssl;
|
||||
private WolfSSLSocket socket;
|
||||
private boolean isClosed = true;
|
||||
|
||||
public WolfSSLInputStream(WolfSSLSession ssl, WolfSSLSocket socket) {
|
||||
this.ssl = ssl;
|
||||
this.socket = socket; /* parent socket */
|
||||
this.isClosed = false;
|
||||
}
|
||||
|
||||
public synchronized void close() throws IOException {
|
||||
|
||||
if (this.socket == null || this.isClosed) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.socket.isClosed()) {
|
||||
WolfSSLDebug.log(getClass(), WolfSSLDebug.INFO,
|
||||
"socket (input) already closed");
|
||||
|
@ -2343,6 +2364,10 @@ public class WolfSSLSocket extends SSLSocket {
|
|||
"socket (input) closed: " + this.socket);
|
||||
}
|
||||
|
||||
this.socket = null;
|
||||
this.ssl = null;
|
||||
this.isClosed = true;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -2381,7 +2406,7 @@ public class WolfSSLSocket extends SSLSocket {
|
|||
}
|
||||
|
||||
/* check if socket is closed */
|
||||
if (socket.isClosed()) {
|
||||
if (this.isClosed || socket == null || socket.isClosed()) {
|
||||
throw new SocketException("Socket is closed");
|
||||
}
|
||||
|
||||
|
@ -2470,13 +2495,20 @@ public class WolfSSLSocket extends SSLSocket {
|
|||
|
||||
private WolfSSLSession ssl;
|
||||
private WolfSSLSocket socket;
|
||||
private boolean isClosed = true;
|
||||
|
||||
public WolfSSLOutputStream(WolfSSLSession ssl, WolfSSLSocket socket) {
|
||||
this.ssl = ssl;
|
||||
this.socket = socket; /* parent socket */
|
||||
this.isClosed = false;
|
||||
}
|
||||
|
||||
public synchronized void close() throws IOException {
|
||||
|
||||
if (this.socket == null || this.isClosed) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (this.socket.isClosed()) {
|
||||
WolfSSLDebug.log(getClass(), WolfSSLDebug.INFO,
|
||||
"socket (output) already closed");
|
||||
|
@ -2487,6 +2519,10 @@ public class WolfSSLSocket extends SSLSocket {
|
|||
"socket (output) closed: " + this.socket);
|
||||
}
|
||||
|
||||
this.socket = null;
|
||||
this.ssl = null;
|
||||
this.isClosed = true;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -2510,6 +2546,10 @@ public class WolfSSLSocket extends SSLSocket {
|
|||
throw new NullPointerException("Input array is null");
|
||||
}
|
||||
|
||||
if (this.socket == null || this.isClosed) {
|
||||
throw new SocketException("Socket is closed");
|
||||
}
|
||||
|
||||
/* check if connection has already been closed/shutdown */
|
||||
WolfSSLDebug.log(getClass(), WolfSSLDebug.INFO,
|
||||
"trying to get socket.handshakeLock (write)");
|
||||
|
|
Loading…
Reference in New Issue