Here are 2 bugs that picked up in valgrind while running egl examples, which I've made sure under 1 examples that eglDestorySurface is being called on the same pointer that was created:
One example:
==13390== 24 bytes in 1 blocks are definitely lost in loss record 13 of 39
==13390== at 0x402B965: calloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==13390== by 0x43FA338: ??? (in /usr/lib/i386-linux-gnu/mesa-egl/libEGL.so.1.0.0)
==13390== by 0x43EA878: eglCreateWindowSurface (in /usr/lib/i386-linux-gnu/mesa-egl/libEGL.so.1.0.0)
==13390== by 0x40F5BF0: Mir_CreateWindow (SDL_mirwindow.c:91)
==13390== by 0x40D64FD: SDL_CreateWindow (SDL_video.c:1252)
==13390== by 0x4074B12: SDL_CreateWindowAndRenderer (SDL_render.c:190)
==13390== by 0x4190904: (below main) (libc-start.c:260)
==13390==
==13390== 3,172 (76 direct, 3,096 indirect) bytes in 1 blocks are definitely lost in loss record 38 of 39
==13390== at 0x40299D8: malloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==13390== by 0x7674F91: ???
==13390== by 0x75DD541: ???
==13390== by 0x76757C3: ???
==13390== by 0x43F57BD: dri2_create_screen (in /usr/lib/i386-linux-gnu/mesa-egl/libEGL.so.1.0.0)
==13390== by 0x43FA50D: dri2_initialize_mir (in /usr/lib/i386-linux-gnu/mesa-egl/libEGL.so.1.0.0)
==13390== by 0x43F4F97: ??? (in /usr/lib/i386-linux-gnu/mesa-egl/libEGL.so.1.0.0)
==13390== by 0x43EEC6C: ??? (in /usr/lib/i386-linux-gnu/mesa-egl/libEGL.so.1.0.0)
==13390== by 0x43EF0A3: _eglMatchDriver (in /usr/lib/i386-linux-gnu/mesa-egl/libEGL.so.1.0.0)
==13390== by 0x43E9C67: eglInitialize (in /usr/lib/i386-linux-gnu/mesa-egl/libEGL.so.1.0.0)
==13390== by 0x400E5DB: _dl_fixup (dl-runtime.c:113)
==13390==
Second example:
==13297== 24 bytes in 1 blocks are definitely lost in loss record 14 of 34
==13297== at 0x402B965: calloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==13297== by 0x40E7338: ??? (in /usr/lib/i386-linux-gnu/mesa-egl/libEGL.so.1.0.0)
==13297== by 0x40D7878: eglCreateWindowSurface (in /usr/lib/i386-linux-gnu/mesa-egl/libEGL.so.1.0.0)
==13297== by 0x8049D69: mir_eglapp_init (in /usr/bin/mir_demo_client_eglplasma)
==13297== by 0x804927F: main (in /usr/bin/mir_demo_client_eglplasma)
==13297==
==13297== 3,172 (76 direct, 3,096 indirect) bytes in 1 blocks are definitely lost in loss record 33 of 34
==13297== at 0x40299D8: malloc (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==13297== by 0x7D81F91: ???
==13297== by 0x7CEA541: ???
==13297== by 0x7D827C3: ???
==13297== by 0x40E27BD: dri2_create_screen (in /usr/lib/i386-linux-gnu/mesa-egl/libEGL.so.1.0.0)
==13297== by 0x40E750D: dri2_initialize_mir (in /usr/lib/i386-linux-gnu/mesa-egl/libEGL.so.1.0.0)
==13297== by 0x40E1F97: ??? (in /usr/lib/i386-linux-gnu/mesa-egl/libEGL.so.1.0.0)
==13297== by 0x40DBC6C: ??? (in /usr/lib/i386-linux-gnu/mesa-egl/libEGL.so.1.0.0)
==13297== by 0x40DC0A3: _eglMatchDriver (in /usr/lib/i386-linux-gnu/mesa-egl/libEGL.so.1.0.0)
==13297== by 0x40D6C67: eglInitialize (in /usr/lib/i386-linux-gnu/mesa-egl/libEGL.so.1.0.0)
==13297== by 0x8049CEF: mir_eglapp_init (in /usr/bin/mir_demo_client_eglplasma)
==13297== by 0x804927F: main (in /usr/bin/mir_demo_client_eglplasma)
They seem like memory leaks in libEGL but it is running things in mir...
To reproduce:
valgrind --tool=memcheck --num-callers=50 --leak-check=full --track-origins=yes mir_demo_client_eglplasma 2>&1 | tee mir-val.log
There appears to be 2 different leaks, but they are consistent. Even when things are cleaned up through eglTerminate and eglDestorySurface.
Here are 2 bugs that picked up in valgrind while running egl examples, which I've made sure under 1 examples that eglDestorySurface is being called on the same pointer that was created:
One example: valgrind/ vgpreload_ memcheck- x86-linux. so) i386-linux- gnu/mesa- egl/libEGL. so.1.0. 0) Surface (in /usr/lib/ i386-linux- gnu/mesa- egl/libEGL. so.1.0. 0) c:91) wAndRenderer (SDL_render.c:190) valgrind/ vgpreload_ memcheck- x86-linux. so) i386-linux- gnu/mesa- egl/libEGL. so.1.0. 0) i386-linux- gnu/mesa- egl/libEGL. so.1.0. 0) i386-linux- gnu/mesa- egl/libEGL. so.1.0. 0) i386-linux- gnu/mesa- egl/libEGL. so.1.0. 0) i386-linux- gnu/mesa- egl/libEGL. so.1.0. 0) i386-linux- gnu/mesa- egl/libEGL. so.1.0. 0)
==13390== 24 bytes in 1 blocks are definitely lost in loss record 13 of 39
==13390== at 0x402B965: calloc (in /usr/lib/
==13390== by 0x43FA338: ??? (in /usr/lib/
==13390== by 0x43EA878: eglCreateWindow
==13390== by 0x40F5BF0: Mir_CreateWindow (SDL_mirwindow.
==13390== by 0x40D64FD: SDL_CreateWindow (SDL_video.c:1252)
==13390== by 0x4074B12: SDL_CreateWindo
==13390== by 0x4190904: (below main) (libc-start.c:260)
==13390==
==13390== 3,172 (76 direct, 3,096 indirect) bytes in 1 blocks are definitely lost in loss record 38 of 39
==13390== at 0x40299D8: malloc (in /usr/lib/
==13390== by 0x7674F91: ???
==13390== by 0x75DD541: ???
==13390== by 0x76757C3: ???
==13390== by 0x43F57BD: dri2_create_screen (in /usr/lib/
==13390== by 0x43FA50D: dri2_initialize_mir (in /usr/lib/
==13390== by 0x43F4F97: ??? (in /usr/lib/
==13390== by 0x43EEC6C: ??? (in /usr/lib/
==13390== by 0x43EF0A3: _eglMatchDriver (in /usr/lib/
==13390== by 0x43E9C67: eglInitialize (in /usr/lib/
==13390== by 0x400E5DB: _dl_fixup (dl-runtime.c:113)
==13390==
Second example: valgrind/ vgpreload_ memcheck- x86-linux. so) i386-linux- gnu/mesa- egl/libEGL. so.1.0. 0) Surface (in /usr/lib/ i386-linux- gnu/mesa- egl/libEGL. so.1.0. 0) mir_demo_ client_ eglplasma) mir_demo_ client_ eglplasma) valgrind/ vgpreload_ memcheck- x86-linux. so) i386-linux- gnu/mesa- egl/libEGL. so.1.0. 0) i386-linux- gnu/mesa- egl/libEGL. so.1.0. 0) i386-linux- gnu/mesa- egl/libEGL. so.1.0. 0) i386-linux- gnu/mesa- egl/libEGL. so.1.0. 0) i386-linux- gnu/mesa- egl/libEGL. so.1.0. 0) i386-linux- gnu/mesa- egl/libEGL. so.1.0. 0) mir_demo_ client_ eglplasma) mir_demo_ client_ eglplasma)
==13297== 24 bytes in 1 blocks are definitely lost in loss record 14 of 34
==13297== at 0x402B965: calloc (in /usr/lib/
==13297== by 0x40E7338: ??? (in /usr/lib/
==13297== by 0x40D7878: eglCreateWindow
==13297== by 0x8049D69: mir_eglapp_init (in /usr/bin/
==13297== by 0x804927F: main (in /usr/bin/
==13297==
==13297== 3,172 (76 direct, 3,096 indirect) bytes in 1 blocks are definitely lost in loss record 33 of 34
==13297== at 0x40299D8: malloc (in /usr/lib/
==13297== by 0x7D81F91: ???
==13297== by 0x7CEA541: ???
==13297== by 0x7D827C3: ???
==13297== by 0x40E27BD: dri2_create_screen (in /usr/lib/
==13297== by 0x40E750D: dri2_initialize_mir (in /usr/lib/
==13297== by 0x40E1F97: ??? (in /usr/lib/
==13297== by 0x40DBC6C: ??? (in /usr/lib/
==13297== by 0x40DC0A3: _eglMatchDriver (in /usr/lib/
==13297== by 0x40D6C67: eglInitialize (in /usr/lib/
==13297== by 0x8049CEF: mir_eglapp_init (in /usr/bin/
==13297== by 0x804927F: main (in /usr/bin/
They seem like memory leaks in libEGL but it is running things in mir...
To reproduce: client_ eglplasma 2>&1 | tee mir-val.log
valgrind --tool=memcheck --num-callers=50 --leak-check=full --track-origins=yes mir_demo_
There appears to be 2 different leaks, but they are consistent. Even when things are cleaned up through eglTerminate and eglDestorySurface.