From cba1b981982278f655f9ae1e3bc79d5eeea32999 Mon Sep 17 00:00:00 2001 From: jfreegman Date: Sat, 22 Jan 2022 13:42:52 -0500 Subject: [PATCH] Fix group av memory leak Introduced in 762a601 --- toxav/groupav.c | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/toxav/groupav.c b/toxav/groupav.c index da68377618c..81e74a4867e 100644 --- a/toxav/groupav.c +++ b/toxav/groupav.c @@ -29,6 +29,16 @@ typedef struct Group_JitterBuffer { uint64_t last_queued_time; } Group_JitterBuffer; +static void free_audio_packet(Group_Audio_Packet *pk) +{ + if (pk == nullptr) { + return; + } + + free(pk->data); + free(pk); +} + static Group_JitterBuffer *create_queue(unsigned int capacity) { unsigned int size = 1; @@ -58,11 +68,9 @@ static Group_JitterBuffer *create_queue(unsigned int capacity) static void clear_queue(Group_JitterBuffer *q) { while (q->bottom != q->top) { - if (q->queue[q->bottom % q->size]) { - free(q->queue[q->bottom % q->size]); - q->queue[q->bottom % q->size] = nullptr; - } - + const size_t idx = q->bottom % q->size; + free_audio_packet(q->queue[idx]); + q->queue[idx] = nullptr; ++q->bottom; } } @@ -279,16 +287,6 @@ static void group_av_groupchat_delete(void *object, uint32_t groupnumber) } } -static void free_audio_packet(Group_Audio_Packet *pk) -{ - if (pk == nullptr) { - return; - } - - free(pk->data); - free(pk); -} - static int decode_audio_packet(Group_AV *group_av, Group_Peer_AV *peer_av, uint32_t groupnumber, uint32_t friendgroupnumber) {