-
Notifications
You must be signed in to change notification settings - Fork 2.4k
Open
Milestone
Description
With SDL 3.2.10, on Debian 12.10, compiled with gcc 14.1.0
Valgrind's memcheck reports a memory leak on the code below.
I am not familiar with the internal SDL code, but it seems strange that the return value of SDL_AddAudioDevice at the line 785 of SDL_Pulseaudio.c is ignored. Doesn't it mean that the handle given in argument is never freed?
#include <SDL3/SDL.h>
int
main(int argc, char* argv[])
{
if (!SDL_InitSubSystem(SDL_INIT_AUDIO)) {
return 1;
}
SDL_QuitSubSystem(SDL_INIT_AUDIO);
SDL_Quit();
return 0;
}
When running it with valgrind:
$ valgrind --leak-check=full ./a.out
==321717== Memcheck, a memory error detector
==321717== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al.
==321717== Using Valgrind-3.19.0 and LibVEX; rerun with -h for copyright info
==321717== Command: ./a.out
==321717==
==321717==
==321717== HEAP SUMMARY:
==321717== in use at exit: 86,529 bytes in 243 blocks
==321717== total heap usage: 1,151 allocs, 908 frees, 329,000 bytes allocated
==321717==
==321717== 129 (72 direct, 57 indirect) bytes in 1 blocks are definitely lost in loss record 70 of 99
==321717== at 0x48416C4: malloc (vg_replace_malloc.c:380)
==321717== by 0x494578: real_realloc (SDL_malloc.c:6329)
==321717== by 0x494832: SDL_realloc_REAL (SDL_malloc.c:6489)
==321717== by 0x49A600: SDL_SetTLS_REAL (SDL_thread.c:93)
==321717== by 0x49AB9F: SDL_GetErrBuf (SDL_thread.c:303)
==321717== by 0x5A7DFF: SDL_SetErrorV_REAL (SDL_error.c:43)
==321717== by 0x5A7DCB: SDL_SetError_REAL (SDL_error.c:33)
==321717== by 0x5B1B10: SDL_FindPhysicalAudioDeviceByCallback (SDL_audio.c:1487)
==321717== by 0x5B1B55: SDL_FindPhysicalAudioDeviceByHandle (SDL_audio.c:1500)
==321717== by 0x5AF494: SDL_AddAudioDevice (SDL_audio.c:684)
==321717== by 0x69A675: AddPulseAudioDevice (SDL_pulseaudio.c:785)
==321717== by 0x69A6C4: SinkInfoCallback (SDL_pulseaudio.c:794)
==321717==
==321717== LEAK SUMMARY:
==321717== definitely lost: 72 bytes in 1 blocks
==321717== indirectly lost: 57 bytes in 2 blocks
==321717== possibly lost: 0 bytes in 0 blocks
==321717== still reachable: 86,400 bytes in 240 blocks
==321717== suppressed: 0 bytes in 0 blocks
==321717== Reachable blocks (those to which a pointer was found) are not shown.
==321717== To see them, rerun with: --leak-check=full --show-leak-kinds=all
==321717==
==321717== For lists of detected and suppressed errors, rerun with: -s
==321717== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)
Metadata
Metadata
Assignees
Labels
No labels