.hgignore
author Sam Lantinga <slouken@libsdl.org>
Thu, 13 Oct 2016 04:54:43 -0700
changeset 10530 2a3f8bc23daa
parent 10303 b326f93e1bc5
child 11702 cf166abbde4a
permissions -rw-r--r--
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)
icculus@4418
     1
syntax:glob
slouken@7232
     2
aclocal.m4
icculus@4418
     3
autom4te*
icculus@4418
     4
config.cache
icculus@4418
     5
config.log
icculus@4418
     6
config.status
icculus@4418
     7
Makefile
icculus@4418
     8
sdl-config
slouken@6250
     9
SDL2.spec
icculus@4418
    10
build
jadahl@10303
    11
gen
slime73@9487
    12
Build
slouken@5318
    13
ewing@4466
    14
# for Xcode
ewing@4466
    15
*.orig
ewing@4466
    16
*.swp
ewing@4466
    17
*.tmp
ewing@4466
    18
*.rej
ewing@4466
    19
*~
ewing@4466
    20
*.o
ewing@4466
    21
*.mode1*
ewing@4466
    22
*.perspective*
ewing@4466
    23
*.pbxuser
ewing@4466
    24
(^|/)build($|/)
icculus@4418
    25
.DS_Store
slouken@9765
    26
xcuserdata
slouken@9765
    27
*.xcworkspace
slouken@5318
    28
slouken@5318
    29
# for Visual C++
slouken@5318
    30
Debug
slouken@5318
    31
Release
slouken@5318
    32
*.user
slouken@5318
    33
*.ncb
slouken@5318
    34
*.suo
slouken@7572
    35
*.sdf
slouken@8848
    36
VisualC/tests/loopwave/sample.wav
slouken@8848
    37
VisualC/tests/testautomation/CompareSurfaces0001_Reference.bmp
slouken@8848
    38
VisualC/tests/testautomation/CompareSurfaces0001_TestOutput.bmp
slouken@8848
    39
VisualC/tests/testgamecontroller/axis.bmp
slouken@8848
    40
VisualC/tests/testgamecontroller/button.bmp
slouken@8848
    41
VisualC/tests/testgamecontroller/controllermap.bmp
slouken@8848
    42
VisualC/tests/testoverlay2/moose.dat
slouken@8848
    43
VisualC/tests/testrendertarget/icon.bmp
slouken@8848
    44
VisualC/tests/testrendertarget/sample.bmp
slouken@8848
    45
VisualC/tests/testscale/icon.bmp
slouken@8848
    46
VisualC/tests/testscale/sample.bmp
slouken@8848
    47
VisualC/tests/testsprite2/icon.bmp
slouken@8848
    48
VisualC/visualtest/icon.bmp
slouken@8848
    49
VisualC/visualtest/testquit.actions
slouken@8848
    50
VisualC/visualtest/testquit.config
slouken@8848
    51
VisualC/visualtest/testquit.exe
slouken@8848
    52
VisualC/visualtest/testquit.parameters
slouken@8848
    53
VisualC/visualtest/testsprite2.exe
slouken@8848
    54
VisualC/visualtest/testsprite2_sample.actions
slouken@8848
    55
VisualC/visualtest/testsprite2_sample.config
slouken@8848
    56
VisualC/visualtest/testsprite2_sample.parameters
slouken@5318
    57
slouken@6907
    58
# for Android
slouken@6907
    59
android-project/local.properties
slouken@6907
    60
icculus@4418
    61
sdl.pc
icculus@4418
    62
test/autom4te*
icculus@4418
    63
test/config.cache
icculus@4418
    64
test/config.log
icculus@4418
    65
test/config.status
icculus@4418
    66
test/Makefile
slouken@6250
    67
test/SDL2.dll
icculus@4418
    68
test/checkkeys
rohitnirmal9@9550
    69
test/controllermap
icculus@4418
    70
test/loopwave
icculus@9012
    71
test/loopwavequeue
slouken@4862
    72
test/testatomic
rohitnirmal9@9550
    73
test/testaudiohotplug
slouken@4862
    74
test/testaudioinfo
slouken@6958
    75
test/testautomation
slouken@4862
    76
test/testdraw2
rohitnirmal9@9550
    77
test/testdrawchessboard
rohitnirmal9@9550
    78
test/testdropfile
icculus@4418
    79
test/testerror
icculus@4418
    80
test/testfile
slouken@6958
    81
test/testgamecontroller
slouken@4862
    82
test/testgesture
slouken@4862
    83
test/testgl2
slouken@4862
    84
test/testgles
rohitnirmal9@9550
    85
test/testgles2
slouken@4862
    86
test/testhaptic
icculus@8935
    87
test/testhittesting
rohitnirmal9@9550
    88
test/testhotplug
icculus@4418
    89
test/testiconv
slouken@4862
    90
test/testime
slouken@4862
    91
test/testintersections
icculus@4418
    92
test/testjoystick
icculus@4418
    93
test/testkeys
slouken@4862
    94
test/testloadso
icculus@4418
    95
test/testlock
slouken@6658
    96
test/testmessage
slouken@4862
    97
test/testmultiaudio
slouken@6286
    98
test/testnative
icculus@4418
    99
test/testoverlay2
icculus@4418
   100
test/testplatform
slouken@4862
   101
test/testpower
icculus@7667
   102
test/testfilesystem
slouken@6517
   103
test/testrelative
slouken@6517
   104
test/testrendercopyex
slouken@6286
   105
test/testrendertarget
slouken@4862
   106
test/testresample
slouken@5453
   107
test/testrumble
slouken@5318
   108
test/testscale
icculus@4418
   109
test/testsem
slouken@5318
   110
test/testshader
slouken@5318
   111
test/testshape
slouken@4862
   112
test/testsprite2
slouken@4862
   113
test/testspriteminimal
slouken@5318
   114
test/teststreaming
slouken@6286
   115
test/testthread
icculus@4418
   116
test/testtimer
icculus@4418
   117
test/testver
rohitnirmal9@9550
   118
test/testviewport
slouken@4862
   119
test/testwm2
icculus@10019
   120
test/testbounds
icculus@4418
   121
test/torturethread
icculus@9800
   122
test/testdisplayinfo
icculus@10109
   123
test/testqsort
icculus@10231
   124
test/testaudiocapture
icculus@4418
   125
test/*.exe
icculus@4418
   126
test/*.dSYM
icculus@8152
   127
buildbot
icculus@8152
   128
test/buildbot