From 66fdb15abf47df006a7cd29f34f30bec516f37aa Mon Sep 17 00:00:00 2001 From: Jean Boussier Date: Sat, 31 Jan 2026 18:59:22 +0100 Subject: thread_sync.c: Fix leak in Queue and SizedQueue This was introduced in 8ce61f90ba4aea3d52e92e258c3803b8b885726e --- thread_sync.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'thread_sync.c') diff --git a/thread_sync.c b/thread_sync.c index e3916c97cb..fa6a60ab62 100644 --- a/thread_sync.c +++ b/thread_sync.c @@ -696,13 +696,20 @@ queue_mark_and_move(void *ptr) } } +static inline void +queue_free_buffer(struct rb_queue *q) +{ + if (q->buffer) { + SIZED_FREE_N(q->buffer, q->capa); + } +} + static void queue_free(void *ptr) { struct rb_queue *q = ptr; - if (q->buffer) { - ruby_sized_xfree(q->buffer, q->capa * sizeof(VALUE)); - } + queue_free_buffer(q); + SIZED_FREE(q); } static size_t @@ -806,7 +813,8 @@ static void szqueue_free(void *ptr) { struct rb_szqueue *sq = ptr; - queue_free(&sq->q); + queue_free_buffer(&sq->q); + SIZED_FREE(sq); } static size_t -- cgit v1.2.3