SDL2.spec.in
author Sam Lantinga <slouken@libsdl.org>
Thu, 13 Oct 2016 04:54:43 -0700
changeset 10530 2a3f8bc23daa
parent 9707 5ca9f59ab336
child 12839 1b94a9e6746e
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)
slouken@0
     1
Summary: Simple DirectMedia Layer
slouken@6255
     2
Name: SDL2
slouken@1361
     3
Version: @SDL_VERSION@
icculus@9361
     4
Release: 2
icculus@1133
     5
Source: http://www.libsdl.org/release/%{name}-%{version}.tar.gz
slouken@0
     6
URL: http://www.libsdl.org/
slouken@5537
     7
License: zlib
slouken@0
     8
Group: System Environment/Libraries
icculus@1133
     9
BuildRoot: %{_tmppath}/%{name}-%{version}-buildroot
slouken@0
    10
Prefix: %{_prefix}
icculus@1133
    11
%ifos linux
slouken@6265
    12
Provides: libSDL2-2.0.so.0
icculus@1133
    13
%endif
slouken@0
    14
slouken@1844
    15
%define __defattr %defattr(-,root,root)
slouken@1844
    16
%define __soext so
slouken@1844
    17
slouken@0
    18
%description
slouken@0
    19
This is the Simple DirectMedia Layer, a generic API that provides low
slouken@0
    20
level access to audio, keyboard, mouse, and display framebuffer across
slouken@0
    21
multiple platforms.
slouken@0
    22
slouken@0
    23
%package devel
slouken@0
    24
Summary: Libraries, includes and more to develop SDL applications.
slouken@0
    25
Group: Development/Libraries
icculus@1133
    26
Requires: %{name} = %{version}
slouken@0
    27
slouken@0
    28
%description devel
slouken@0
    29
This is the Simple DirectMedia Layer, a generic API that provides low
slouken@0
    30
level access to audio, keyboard, mouse, and display framebuffer across
slouken@0
    31
multiple platforms.
slouken@0
    32
slouken@0
    33
This is the libraries, include files and other resources you can use
slouken@0
    34
to develop SDL applications.
slouken@0
    35
slouken@0
    36
slouken@0
    37
%prep
slouken@0
    38
%setup -q 
slouken@0
    39
slouken@0
    40
%build
icculus@1133
    41
%ifos linux
slouken@5047
    42
CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=%{prefix} --disable-video-directfb
icculus@1133
    43
%else
slouken@1588
    44
%configure
icculus@1133
    45
%endif
slouken@0
    46
make
slouken@0
    47
slouken@0
    48
%install
slouken@0
    49
rm -rf $RPM_BUILD_ROOT
icculus@1133
    50
%ifos linux
slouken@1390
    51
make install prefix=$RPM_BUILD_ROOT%{prefix} \
slouken@1390
    52
             bindir=$RPM_BUILD_ROOT%{_bindir} \
slouken@1390
    53
             libdir=$RPM_BUILD_ROOT%{_libdir} \
slouken@1390
    54
             includedir=$RPM_BUILD_ROOT%{_includedir} \
slouken@1390
    55
             datadir=$RPM_BUILD_ROOT%{_datadir} \
slouken@1390
    56
             mandir=$RPM_BUILD_ROOT%{_mandir}
icculus@1133
    57
%else
icculus@1133
    58
%makeinstall
icculus@1133
    59
%endif
slouken@0
    60
slouken@0
    61
%clean
slouken@0
    62
rm -rf $RPM_BUILD_ROOT
slouken@0
    63
slouken@0
    64
%files
icculus@1133
    65
%{__defattr}
icculus@9361
    66
%doc README*.txt COPYING.txt CREDITS.txt BUGS.txt
icculus@1133
    67
%{_libdir}/lib*.%{__soext}.*
slouken@0
    68
slouken@0
    69
%files devel
slouken@1844
    70
%{__defattr}
icculus@9707
    71
%doc docs/README*.md
icculus@1133
    72
%{_bindir}/*-config
icculus@1133
    73
%{_libdir}/lib*.a
icculus@1133
    74
%{_libdir}/lib*.la
icculus@1133
    75
%{_libdir}/lib*.%{__soext}
slouken@6265
    76
%{_includedir}/*/*.h
slouken@6265
    77
%{_libdir}/pkgconfig/*
slouken@1361
    78
%{_datadir}/aclocal/*
slouken@0
    79
slouken@0
    80
%changelog
icculus@9707
    81
* Thu Jun 04 2015 Ryan C. Gordon <icculus@icculus.org>
icculus@9707
    82
- Fixed README paths.
icculus@9707
    83
icculus@9361
    84
* Sun Dec 07 2014 Simone Contini <s.contini@oltrelinux.com>
icculus@9361
    85
- Fixed changelog date issue and docs filenames
icculus@9361
    86
slouken@6265
    87
* Sun Jan 22 2012 Sam Lantinga <slouken@libsdl.org>
slouken@6265
    88
- Updated for SDL 2.0
slouken@6265
    89
slouken@1844
    90
* Tue May 16 2006 Sam Lantinga <slouken@libsdl.org>
slouken@1844
    91
- Removed support for Darwin, due to build problems on ps2linux
slouken@1844
    92
icculus@9361
    93
* Sat Jan 03 2004 Anders Bjorklund <afb@algonet.se>
icculus@1133
    94
- Added support for Darwin, updated spec file
icculus@1133
    95
slouken@0
    96
* Wed Jan 19 2000 Sam Lantinga <slouken@libsdl.org>
slouken@0
    97
- Re-integrated spec file into SDL distribution
slouken@0
    98
- 'name' and 'version' come from configure 
slouken@0
    99
- Some of the documentation is devel specific
slouken@0
   100
- Removed SMP support from %build - it doesn't work with libtool anyway
slouken@0
   101
slouken@0
   102
* Tue Jan 18 2000 Hakan Tandogan <hakan@iconsult.com>
slouken@0
   103
- Hacked Mandrake sdl spec to build 1.1
slouken@0
   104
slouken@0
   105
* Sun Dec 19 1999 John Buswell <johnb@mandrakesoft.com>
slouken@0
   106
- Build Release
slouken@0
   107
slouken@0
   108
* Sat Dec 18 1999 John Buswell <johnb@mandrakesoft.com>
slouken@0
   109
- Add symlink for libSDL-1.0.so.0 required by sdlbomber
slouken@0
   110
- Added docs
slouken@0
   111
slouken@0
   112
* Thu Dec 09 1999 Lenny Cartier <lenny@mandrakesoft.com>
slouken@0
   113
- v 1.0.0
slouken@0
   114
slouken@0
   115
* Mon Nov  1 1999 Chmouel Boudjnah <chmouel@mandrakesoft.com>
slouken@0
   116
- First spec file for Mandrake distribution.
slouken@0
   117
slouken@0
   118
# end of file