• Show log

    Commit

  • Hash : 063f752e
    Author : Sam Lantinga
    Date : 2016-10-13T04:54:43

    Fixed bug 3328 - Race condition in Wayland_VideoInit
    
    Robert Folland
    
    When running this little test program with SDL2 on Wayland it often crashes in SDL_Init.
    
    From a backtrace it is apparent that there is a race condition in creating a xkb_context_ref. Sometimes it is 0x0.
    
    By moving the relevant lines higher up in Wayland_VideoInit (in SDL2-2.0.4/src/video/wayland/SDL_waylandvideo.c:302) this seems to get fixed.
    
    I moved the call to WAYLAND_xkb_context_new() up to before the call to WAYLAND_wl_display_connect().
    
    Here is the test program (just a loop of init and quit), and a backtrace from gdb:
    
    #include <cstdio>
    #include <stdlib.h>
    #include <SDL2/SDL.h>
    #include <unistd.h>
    #include <iostream>
    
    int main(int argc, char **argv)
    {
        int count = atoi(argv[1]);
    
        for (int i = 0; i < count; i++) {
            std::cout << "Init " << i << std::endl;
            if (SDL_Init(SDL_INIT_VIDEO) < 0) {
                SDL_LogError(SDL_LOG_CATEGORY_APPLICATION,
                             "Couldn't initialize SDL: %s\n",
                             SDL_GetError());
                return 1;
            }
            std::cout << "Quit" << std::endl;
            SDL_Quit();
        }
        return 0;
    }
    
    
    Init 12
    Quit
    Init 13
    
    Program received signal SIGSEGV, Segmentation fault.
    xkb_context_ref (ctx=ctx@entry=0x0) at src/context.c:156
    156         ctx->refcnt++;
    (gdb) bt
    #0  xkb_context_ref (ctx=ctx@entry=0x0) at src/context.c:156
    #1  0x00007ffff5e1cd4c in xkb_keymap_new (ctx=0x0, format=XKB_KEYMAP_FORMAT_TEXT_V1, flags=flags@entry=XKB_KEYMAP_COMPILE_NO_FLAGS) at src/keymap-priv.c:65
    #2  0x00007ffff5e1c6cc in xkb_keymap_new_from_buffer (ctx=<optimized out>,
        buffer=0x7ffff7fd5000 "xkb_keymap {\nxkb_keycodes \"(unnamed)\" {\n\tminimum = 8;\n\tmaximum = 255;\n\t<ESC>", ' ' <repeats 16 times>, "= 9;\n\t<AE01>", ' ' <re
    peats 15 times>, "= 10;\n\t<AE02>", ' ' <repeats 15 times>, "= 11;\n\t<AE03>", ' ' <repeats 15 times>, "= 12;\n\t<AE04>", ' ' <repeats 12 times>..., length=48090,
        format=<optimized out>, flags=<optimized out>) at src/keymap.c:191
    #3  0x00007ffff7b8ea4e in keyboard_handle_keymap (data=0x6169b0, keyboard=<optimized out>, format=<optimized out>, fd=5, size=48091)
        at /home/vlab/abs/sdl2/src/SDL2-2.0.4/src/video/wayland/SDL_waylandevents.c:269
    #4  0x00007ffff64501f0 in ffi_call_unix64 () from /usr/lib/libffi.so.6
    #5  0x00007ffff644fc58 in ffi_call () from /usr/lib/libffi.so.6
    #6  0x00007ffff665be3e in wl_closure_invoke (closure=closure@entry=0x61f000, flags=flags@entry=1, target=<optimized out>, target@entry=0x616d20,
        opcode=opcode@entry=0, data=<optimized out>) at src/connection.c:949
    #7  0x00007ffff6658be0 in dispatch_event (display=<optimized out>, queue=<optimized out>) at src/wayland-client.c:1274
    #8  0x00007ffff6659db4 in dispatch_queue (queue=0x617398, display=0x6172d0) at src/wayland-client.c:1420
    #9  wl_display_dispatch_queue_pending (display=0x6172d0, queue=0x617398) at src/wayland-client.c:1662
    #10 0x00007ffff665a0cf in wl_display_roundtrip_queue (display=0x6172d0, queue=0x617398) at src/wayland-client.c:1085
    #11 0x00007ffff7b8faa0 in Wayland_VideoInit (_this=<optimized out>) at /home/vlab/abs/sdl2/src/SDL2-2.0.4/src/video/wayland/SDL_waylandvideo.c:302
    #12 0x00007ffff7b7aed6 in SDL_VideoInit_REAL (driver_name=<optimized out>, driver_name@entry=0x0) at /home/vlab/abs/sdl2/src/SDL2-2.0.4/src/video/SDL_video.c:513
    #13 0x00007ffff7ae0ee7 in SDL_InitSubSystem_REAL (flags=16416) at /home/vlab/abs/sdl2/src/SDL2-2.0.4/src/SDL.c:173
    #14 0x0000000000400b24 in main (argc=2, argv=0x7fffffffebb8) at vplay-init.cpp:13
    (gdb)
    

  • Properties

  • Git HTTP https://git.kmx.io/kc3-lang/SDL.git
    Git SSH git@git.kmx.io:kc3-lang/SDL.git
    Public access ? public
    Description

    Fork of https://github.com/libsdl-org/SDL

    Users
    thodg_m kc3_lang_org thodg_w thodg_l www_kmx_io thodg
    Tags