Bug#968363: libproxy: px_proxy_factory_get_proxies not thread-safe

Tobias Klausmann klausman at schwarzvogel.de
Thu Nov 19 13:18:50 GMT 2020


Hi,

as noted above, my use for this fix is quodlibet not segfaulting
anymore as describe in bug 970687. So I got the latest libproxy
source package (0.4.15-15) and built it, and then installed both
the bianry package and the debug symbols.

Quodlibet still dies, even with the new libproxy, and still *in*
libproxy, as indicated by the attached gdb backtrace.

Best,
Tobias
-------------- next part --------------
(gdb) bt full
#0  __GI_raise (sig=sig at entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
        set = {__val = {0, 0, 140736917905544, 1911038256753492992, 140737119416064, 140737264021063, 0, 0, 140736917905568, 0, 140736917907528, 0, 18446744073709551608, 7, 140736918138176, 140736918138874}}
        pid = <optimized out>
        tid = <optimized out>
#1  0x00007ffff7c50537 in __GI_abort () at abort.c:79
        save_stage = 1
        act = {__sigaction_handler = {sa_handler = 0x0, sa_sigaction = 0x0}, sa_mask = {__val = {140737264047564, 0, 0, 2, 9223372036854775822, 0 <repeats 11 times>}}, sa_flags = 0, sa_restorer = 0x0}
        sigs = {__val = {32, 0 <repeats 15 times>}}
#2  0x00007ffff5231301 in  () at /lib/x86_64-linux-gnu/libstdc++.so.6
#3  0x00007ffff523c0cf in  () at /lib/x86_64-linux-gnu/libstdc++.so.6
#4  0x00007ffff523c220 in __gxx_personality_v0 () at /lib/x86_64-linux-gnu/libstdc++.so.6
#5  0x00007ffff2a0fe81 in __libunwind_Unwind_Resume () at /lib/x86_64-linux-gnu/libunwind.so.8
#6  0x00007fffde032fd5 in __gnu_cxx::new_allocator<libproxy::url>::~new_allocator() (this=<optimized out>, __in_chrg=<optimized out>) at /usr/include/c++/10/ext/new_allocator.h:89
        proxy = <optimized out>
        response = std::vector of length 0, capacity 0
#7  std::allocator<libproxy::url>::~allocator() (this=<optimized out>, __in_chrg=<optimized out>) at /usr/include/c++/10/bits/allocator.h:162
        proxy = <optimized out>
        response = std::vector of length 0, capacity 0
#8  std::_Vector_base<libproxy::url, std::allocator<libproxy::url> >::_Vector_impl::~_Vector_impl() (this=<optimized out>, __in_chrg=<optimized out>) at /usr/include/c++/10/bits/stl_vector.h:128
        proxy = <optimized out>
        response = std::vector of length 0, capacity 0
#9  std::_Vector_base<libproxy::url, std::allocator<libproxy::url> >::~_Vector_base() (this=<optimized out>, __in_chrg=<optimized out>) at /usr/include/c++/10/bits/stl_vector.h:337
        proxy = <optimized out>
        response = std::vector of length 0, capacity 0
#10 std::vector<libproxy::url, std::allocator<libproxy::url> >::~vector() (this=<optimized out>, __in_chrg=<optimized out>) at /usr/include/c++/10/bits/stl_vector.h:683
        proxy = <optimized out>
        response = std::vector of length 0, capacity 0
#11 envvar_config_extension::get_config(libproxy::url const&) (this=<optimized out>, dst=<optimized out>) at /usr/include/c++/10/bits/stl_vector.h:678
        proxy = <optimized out>
        response = std::vector of length 0, capacity 0
#12 0x00007fffde02a23c in libproxy::proxy_factory::get_config(libproxy::url&, std::vector<libproxy::url, std::allocator<libproxy::url> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&) (this=0x7fffe0007320, realurl=..., config=std::vector of length 0, capacity 0, ignore="") at ./libproxy/proxy.cpp:265
        configurator = 0x7fffe001b460
        i = 0x7fffe001b460
        configs = std::vector of length 1, capacity 1 = {0x7fffe001b460}
#13 0x00007fffde02a656 in libproxy::proxy_factory::get_proxies(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)
    (this=0x7fffe0007320, realurl="http://stream.antenne.com:80/") at ./libproxy/proxy.cpp:206
        configs = std::vector of length 0, capacity 0
        ignore = ""
        dst = {m_orig = "http://stream.antenne.com:80/", m_scheme = "http", m_user = "", m_pass = "", m_host = "stream.antenne.com", m_port = 80, m_path = "/", m_query = "", m_ips = 0x0}
        response = std::vector of length 0, capacity 0
#14 0x00007fffde02aad1 in px_proxy_factory_get_proxies(pxProxyFactory_*, char const*) (self=0x7fffe0007320, url=0x7fffe003c160 "http://stream.antenne.com:80/") at ./libproxy/proxy.cpp:465
        proxies = std::vector of length 0, capacity 0
        retval = <optimized out>
#15 0x00007fffdf64955f in  () at /usr/lib/x86_64-linux-gnu/gio/modules/libgiolibproxy.so
#16 0x00007ffff704afbe in  () at /lib/x86_64-linux-gnu/libgio-2.0.so.0
#17 0x00007ffff72f76e4 in  () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#18 0x00007ffff72f6dfd in  () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#19 0x00007ffff7f95ea7 in start_thread (arg=<optimized out>) at pthread_create.c:477
        ret = <optimized out>
        pd = <optimized out>
        unwind_buf = 
              {cancel_jmp_buf = {{jmp_buf = {140736917911296, -2084462071721387667, 140737103353358, 140737103353359, 140736917909440, 8396800, 2084387303329208685, 2084444491399272813}, mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}}
        not_first_call = 0
#20 0x00007ffff7d28d4f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95



More information about the pkg-gnome-maintainers mailing list