Skip to content
Snippets Groups Projects
Commit 1caa5c05 authored by Lyubomir Marinov's avatar Lyubomir Marinov
Browse files

Fixes memory leaks.

parent 0eee18aa
Branches
Tags
No related merge requests found
...@@ -227,10 +227,13 @@ private void closeDatagramTransport() ...@@ -227,10 +227,13 @@ private void closeDatagramTransport()
* to try to establish a DTLS connection. * to try to establish a DTLS connection.
* *
* @param i the number of tries remaining after the current one * @param i the number of tries remaining after the current one
* @param datagramTransport
* @return <tt>true</tt> to try to establish a DTLS connection; otherwise, * @return <tt>true</tt> to try to establish a DTLS connection; otherwise,
* <tt>false</tt> * <tt>false</tt>
*/ */
private boolean enterRunInConnectThreadLoop(int i) private boolean enterRunInConnectThreadLoop(
int i,
DatagramTransport datagramTransport)
{ {
if ((i < 0) || (i > CONNECT_TRIES)) if ((i < 0) || (i > CONNECT_TRIES))
{ {
...@@ -654,7 +657,7 @@ private void runInConnectThread( ...@@ -654,7 +657,7 @@ private void runInConnectThread(
for (int i = CONNECT_TRIES - 1; i >= 0; i--) for (int i = CONNECT_TRIES - 1; i >= 0; i--)
{ {
if (!enterRunInConnectThreadLoop(i)) if (!enterRunInConnectThreadLoop(i, datagramTransport))
break; break;
try try
{ {
...@@ -694,7 +697,7 @@ else if (dtlsProtocol instanceof DTLSServerProtocol) ...@@ -694,7 +697,7 @@ else if (dtlsProtocol instanceof DTLSServerProtocol)
for (int i = CONNECT_TRIES - 1; i >= 0; i--) for (int i = CONNECT_TRIES - 1; i >= 0; i--)
{ {
if (!enterRunInConnectThreadLoop(i)) if (!enterRunInConnectThreadLoop(i, datagramTransport))
break; break;
try try
{ {
......
...@@ -25,6 +25,13 @@ public class DtlsTransformEngine ...@@ -25,6 +25,13 @@ public class DtlsTransformEngine
*/ */
private AbstractRTPConnector connector; private AbstractRTPConnector connector;
/**
* The indicator which determines whether
* {@link SrtpControl.TransformEngine#cleanup()} has been invoked on this
* instance to prepare it for garbage collection.
*/
private boolean disposed = false;
/** /**
* The <tt>DtlsControl</tt> which has initialized this instance. * The <tt>DtlsControl</tt> which has initialized this instance.
*/ */
...@@ -62,8 +69,11 @@ public DtlsTransformEngine(DtlsControlImpl dtlsControl) ...@@ -62,8 +69,11 @@ public DtlsTransformEngine(DtlsControlImpl dtlsControl)
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
@Override
public void cleanup() public void cleanup()
{ {
disposed = true;
for (int i = 0; i < packetTransformers.length; i++) for (int i = 0; i < packetTransformers.length; i++)
{ {
DtlsPacketTransformer packetTransformer = packetTransformers[i]; DtlsPacketTransformer packetTransformer = packetTransformers[i];
...@@ -123,7 +133,7 @@ private DtlsPacketTransformer getPacketTransformer(int componentID) ...@@ -123,7 +133,7 @@ private DtlsPacketTransformer getPacketTransformer(int componentID)
int index = componentID - 1; int index = componentID - 1;
DtlsPacketTransformer packetTransformer = packetTransformers[index]; DtlsPacketTransformer packetTransformer = packetTransformers[index];
if (packetTransformer == null) if ((packetTransformer == null) && !disposed)
{ {
packetTransformer = createPacketTransformer(componentID); packetTransformer = createPacketTransformer(componentID);
if (packetTransformer != null) if (packetTransformer != null)
......
...@@ -396,6 +396,16 @@ public void run() ...@@ -396,6 +396,16 @@ public void run()
*/ */
private long zrtpUnprotect; private long zrtpUnprotect;
/**
* The indicator which determines whether
* {@link SrtpControl.TransformEngine#cleanup()} has been invoked on this
* instance to prepare it for garbage collection. Disallows
* {@link #getRTCPTransformer()} to initialize a new
* <tt>ZRTCPTransformer</tt> instance which cannot possibly be correctly
* used after the disposal of this instance anyway.
*/
private boolean disposed = false;
/** /**
* Construct a ZRTPTransformEngine. * Construct a ZRTPTransformEngine.
* *
...@@ -418,7 +428,7 @@ public ZRTPTransformEngine() ...@@ -418,7 +428,7 @@ public ZRTPTransformEngine()
*/ */
public ZRTCPTransformer getRTCPTransformer() public ZRTCPTransformer getRTCPTransformer()
{ {
if(zrtcpTransformer == null) if ((zrtcpTransformer == null) && !disposed)
zrtcpTransformer = new ZRTCPTransformer(); zrtcpTransformer = new ZRTCPTransformer();
return zrtcpTransformer; return zrtcpTransformer;
} }
...@@ -670,8 +680,11 @@ public void stopZrtp() ...@@ -670,8 +680,11 @@ public void stopZrtp()
/** /**
* Cleanup function for any remaining timers * Cleanup function for any remaining timers
*/ */
@Override
public void cleanup() public void cleanup()
{ {
disposed = true;
stopZrtp(); stopZrtp();
if (timeoutProvider != null) if (timeoutProvider != null)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment