From cb43494cd005ee73955fa8aaf2b55fdd4bf269fa Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Mon, 15 Feb 2016 16:19:40 -0500 Subject: [PATCH] Fix buffer leak when the audio receive thread dies --- limelight-common/AudioStream.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/limelight-common/AudioStream.c b/limelight-common/AudioStream.c index 748d06f..8b020a7 100644 --- a/limelight-common/AudioStream.c +++ b/limelight-common/AudioStream.c @@ -158,7 +158,7 @@ static void ReceiveThreadProc(void* context) { if (packet == NULL) { Limelog("Audio Receive: malloc() failed\n"); ListenerCallbacks.connectionTerminated(-1); - return; + break; } } @@ -167,7 +167,7 @@ static void ReceiveThreadProc(void* context) { Limelog("Audio Receive: recv() failed: %d\n", (int)LastSocketError()); free(packet); ListenerCallbacks.connectionTerminated(LastSocketError()); - return; + break; } if (packet->size < sizeof(RTP_PACKET)) { @@ -189,7 +189,7 @@ static void ReceiveThreadProc(void* context) { if ((AudioCallbacks.capabilities & CAPABILITY_DIRECT_SUBMIT) == 0) { if (!queuePacketToLbq(&packet)) { // An exit signal was received - return; + break; } } else { @@ -208,16 +208,25 @@ static void ReceiveThreadProc(void* context) { if ((AudioCallbacks.capabilities & CAPABILITY_DIRECT_SUBMIT) == 0) { if (!queuePacketToLbq(&packet)) { // An exit signal was received - return; + break; } } else { decodeInputData(packet); } } + + // Break on exit + if (packet != NULL) { + break; + } } } } + + if (packet != NULL) { + free(packet); + } } static void DecoderThreadProc(void* context) {