[Jarvis] partly backport of PR 9231 to fix segfault
authorBernd Kuhls <berndkuhls@hotmail.com>
Sat, 19 Mar 2016 07:49:43 +0000 (08:49 +0100)
committerBernd Kuhls <bernd.kuhls@t-online.de>
Sat, 19 Mar 2016 17:10:59 +0000 (18:10 +0100)
commit6a9e2bf65a346a43caff06efbf6051318d11aa8e
treed4edd978ee874c13f627228b7c7766c5636d7ae3
parenta7caa16680f09810b730e88b3368f221465c9eee
[Jarvis] partly backport of PR 9231 to fix segfault

This patch is a backport of
https://github.com/xbmc/xbmc/commit/a81208e3b53b84763fb9f20d8642ffc7bc63c9a7
to fix a segfault during playback of vaapi-accelerated mpeg2 content:

terminate called after throwing an instance of 'std::logic_error'
  what():  basic_string::_S_construct null not valid
[New LWP 3743]

Program received signal SIGABRT, Aborted.
[Switching to LWP 3743]
0xb5664a9b in raise () from /lib/libc.so.0
(gdb) bt full
#0  0xb5664a9b in raise () from /lib/libc.so.0
No symbol table info available.
#1  0xb5660520 in abort () from /lib/libc.so.0
No symbol table info available.
#2  0xb56e6536 in __gnu_cxx::__verbose_terminate_handler() () from /usr/lib/libstdc++.so.6
No symbol table info available.
#3  0xb56e4a1c in ?? () from /usr/lib/libstdc++.so.6
No symbol table info available.
#4  0xb56e4a80 in std::terminate() () from /usr/lib/libstdc++.so.6
No symbol table info available.
#5  0xb56e4cc9 in __cxa_throw () from /usr/lib/libstdc++.so.6
No symbol table info available.
#6  0xb5719d79 in std::__throw_logic_error(char const*) () from /usr/lib/libstdc++.so.6
No symbol table info available.
#7  0xb5722c41 in char* std::string::_S_construct<char const*>(char const*, char const*, std::allocator<char> const&, std::forward_iterator_tag) () from /usr/lib/libstdc++.so.6
No symbol table info available.
#8  0xb5722cc7 in std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&) () from /usr/lib/libstdc++.so.6
No symbol table info available.
#9  0x0848fea3 in CDVDVideoCodec::IsCodecDisabled (map=0x9130420 <g_vaapi_available>, size=5, id=AV_CODEC_ID_MPEG4)
    at DVDVideoCodec.cpp:75
        index = <optimized out>
#10 0x08499d04 in VAAPI::CDecoder::Open (this=0xd09e5e8, avctx=0xd6a2ec0, mainctx=0xd6a2ec0, fmt=AV_PIX_FMT_VAAPI_VLD,
    surfaces=6) at VAAPI.cpp:503
        gpuvendor = {static npos = <optimized out>,
          _M_dataplus = {<std::allocator<char>> = {<__gnu_cxx::new_allocator<char>> = {<No data fields>}, <No data fields>}, _M_p = 0xceb267c "intel open source technology center"}}
        profile = <optimized out>
#11 0x08491bda in CDVDVideoCodecFFmpeg::GetFormat (avctx=0xd6a2ec0, fmt=0x986d9c0) at DVDVideoCodecFFmpeg.cpp:143
        dec = 0xd09e5e8
        ctx = <optimized out>
        cur = 0x986d9c0
#12 0xb61c8ced in ?? () from /usr/lib/libavcodec.so.56
xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodec.cpp
xbmc/cores/dvdplayer/DVDCodecs/Video/DVDVideoCodec.h
xbmc/cores/dvdplayer/DVDCodecs/Video/VAAPI.cpp
xbmc/cores/dvdplayer/DVDCodecs/Video/VDPAU.cpp