История изменений
Исправление mazdai, (текущая версия) :
Чуваки, вот решение. Функцию освобождения ресурсов (там, откуда вы вызываете SDL_Quit, у меня это shutdown() ), нужно объявить как static, потому что программа сегфолтится, когда вызывается эта функция. Если использовать atexit, такого не произойдет
теперь объясните, пожалуйста, откуда здесь вообще повторный вызов функции shutdown и почему он происходит из Xlib? Возможно, я неправильно понял вывод backtrace, но этого я понять не могу:
(gdb) up
#1 0x00007ffff6adee02 in XCloseIM () from /usr/lib/x86_64-linux-gnu/libX11.so.6
(gdb) back
#0 0x00007ffff6ba7895 in ?? () from /usr/lib/x86_64-linux-gnu/libX11.so.6
#1 0x00007ffff6adee02 in XCloseIM () from /usr/lib/x86_64-linux-gnu/libX11.so.6
#2 0x00007ffff7b93d3b in X11_VideoQuit (_this=<optimized out>) at /home/rustam/src/SDL2-2.0.2/src/video/x11/SDL_x11video.c:652
#3 0x00007ffff7b7bacb in SDL_VideoQuit_REAL () at /home/rustam/src/SDL2-2.0.2/src/video/SDL_video.c:2352
#4 0x00007ffff7ad6ac6 in SDL_QuitSubSystem_REAL (flags=<optimized out>) at /home/rustam/src/SDL2-2.0.2/src/SDL.c:297
#5 SDL_Quit_REAL () at /home/rustam/src/SDL2-2.0.2/src/SDL.c:357
#6 0x00000000004009c4 in shutdown () at main.c:45
#7 0x00007ffff6880786 in xcb_disconnect () from /usr/lib/x86_64-linux-gnu/libxcb.so.1
#8 0x00007ffff6ab04e7 in XCloseDisplay () from /usr/lib/x86_64-linux-gnu/libX11.so.6
#9 0x00007ffff7b93c9a in X11_DeleteDevice (device=0x607ad0) at /home/rustam/src/SDL2-2.0.2/src/video/x11/SDL_x11video.c:324
#10 0x00007ffff7b7bc2d in SDL_VideoQuit_REAL () at /home/rustam/src/SDL2-2.0.2/src/video/SDL_video.c:2377
#11 0x00007ffff7ad6ac6 in SDL_QuitSubSystem_REAL (flags=<optimized out>) at /home/rustam/src/SDL2-2.0.2/src/SDL.c:297
#12 SDL_Quit_REAL () at /home/rustam/src/SDL2-2.0.2/src/SDL.c:357
#13 0x00000000004009c4 in shutdown () at main.c:45
#14 0x00000000004009ed in main (argc=1, args=0x7fffffffe538) at main.c:55
Исходная версия mazdai, :
Чуваки, вот решение. Функцию освобождения ресурсов (там, откуда вы вызываете SDL_Quit, у меня это shutdown() ), нужно объявить как static, потому что программа сегфолтится, когда вызывается эта функция. Если использовать atexit, такого не произойдет
теперь объясните, пожалуйста, откуда здесь вообще повторный вызов функции shutdown и почему он происходит из Xlib? Возможно, я неправильно понял вывод backtrace, но этого я понять не могу:
(gdb) up
#1 0x00007ffff6adee02 in XCloseIM () from /usr/lib/x86_64-linux-gnu/libX11.so.6
(gdb) back
#0 0x00007ffff6ba7895 in ?? () from /usr/lib/x86_64-linux-gnu/libX11.so.6
#1 0x00007ffff6adee02 in XCloseIM () from /usr/lib/x86_64-linux-gnu/libX11.so.6
#2 0x00007ffff7b93d3b in X11_VideoQuit (_this=<optimized out>) at /home/rustam/src/SDL2-2.0.2/src/video/x11/SDL_x11video.c:652
#3 0x00007ffff7b7bacb in SDL_VideoQuit_REAL () at /home/rustam/src/SDL2-2.0.2/src/video/SDL_video.c:2352
#4 0x00007ffff7ad6ac6 in SDL_QuitSubSystem_REAL (flags=<optimized out>) at /home/rustam/src/SDL2-2.0.2/src/SDL.c:297
#5 SDL_Quit_REAL () at /home/rustam/src/SDL2-2.0.2/src/SDL.c:357
#6 0x00000000004009c4 in shutdown () at main.c:45
#7 0x00007ffff6880786 in xcb_disconnect () from /usr/lib/x86_64-linux-gnu/libxcb.so.1
#8 0x00007ffff6ab04e7 in XCloseDisplay () from /usr/lib/x86_64-linux-gnu/libX11.so.6
#9 0x00007ffff7b93c9a in X11_DeleteDevice (device=0x607ad0) at /home/rustam/src/SDL2-2.0.2/src/video/x11/SDL_x11video.c:324
#10 0x00007ffff7b7bc2d in SDL_VideoQuit_REAL () at /home/rustam/src/SDL2-2.0.2/src/video/SDL_video.c:2377
#11 0x00007ffff7ad6ac6 in SDL_QuitSubSystem_REAL (flags=<optimized out>) at /home/rustam/src/SDL2-2.0.2/src/SDL.c:297
#12 SDL_Quit_REAL () at /home/rustam/src/SDL2-2.0.2/src/SDL.c:357
#13 0x00000000004009c4 in shutdown () at main.c:45
#14 0x00000000004009ed in main (argc=1, args=0x7fffffffe538) at main.c:55