Opened 12 months ago

Last modified 11 months ago

#3324 new bug

Deluge segfaults when starting to receive packets from some torrents

Reported by: skuizy Owned by:
Priority: critical Milestone: not applicable
Component: libtorrent Version: develop
Keywords: segfault Cc:

Description

deluged 2.1.1.dev7496
libtorrent: 1.1.13.0
Python: 3.7.5rc1
OS: Linux Ubuntu 19.10 Eoan Ermine


libboost-python1.67.0:  Installed: 1.67.0-13ubuntu1
libboost-iostreams1.67.0:  Installed: 1.67.0-13ubuntu1
libboost-locale1.67.0:  Installed: 1.67.0-13ubuntu1
libboost-filesystem1.67.0:  Installed: 1.67.0-13ubuntu1
libboost-date-time1.67.0:  Installed: 1.67.0-13ubuntu1
libboost-thread1.67.0:  Installed: 1.67.0-13ubuntu1
libboost-system1.67.0:  Installed: 1.67.0-13ubuntu1

I'm forced to pause some torrents as they keeps segfaulting deluge as it starts recieving packets.

I've run it againts gdb and here is the stack :

Thread 2 "python3" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0xb4d15460 (LWP 26810)]
0xb4446f30 in ?? ()
(gdb) bt
#0  0xb4446f30 in ?? ()
#1  0xb582b848 in boost::_mfi::cmf2<bool, libtorrent::piece_picker, libtorrent::piece_picker::downloading_piece const*, libtorrent::piece_picker::downloading_piece const*>::call<libtorrent::piece_picker const* const, libtorrent::piece_picker::downloading_piece const*, libtorrent::piece_picker::downloading_piece const*> (this=0xb4d1481c, this=0xb4d1481c, u=@0xb4d14824: 0xae288a88, b1=<synthetic pointer>: <optimized out>,
    b2=<synthetic pointer>: <optimized out>) at /usr/include/boost/bind/mem_fn_template.hpp:342
#2  boost::_mfi::cmf2<bool, libtorrent::piece_picker, libtorrent::piece_picker::downloading_piece const*, libtorrent::piece_picker::downloading_piece const*>::operator()<libtorrent::piece_picker const*> (
    u=@0xb4d14824: 0xae288a88, a2=<optimized out>, a1=<optimized out>, this=0xb4d1481c) at /usr/include/boost/bind/mem_fn_template.hpp:345
#3  boost::_bi::list3<boost::_bi::value<libtorrent::piece_picker const*>, boost::arg<1>, boost::arg<2> >::operator()<bool, boost::_mfi::cmf2<bool, libtorrent::piece_picker, libtorrent::piece_picker::downloading_piece const*, libtorrent::piece_picker::downloading_piece const*>, boost::_bi::rrlist2<libtorrent::piece_picker::downloading_piece const*&, libtorrent::piece_picker::downloading_piece const*&> > (a=<synthetic pointer>...,
    f=..., this=0xb4d14824) at /usr/include/boost/bind/bind.hpp:388
#4  boost::_bi::bind_t<bool, boost::_mfi::cmf2<bool, libtorrent::piece_picker, libtorrent::piece_picker::downloading_piece const*, libtorrent::piece_picker::downloading_piece const*>, boost::_bi::list3<boost::_bi::value<libtorrent::piece_picker const*>, boost::arg<1>, boost::arg<2> > >::operator()<libtorrent::piece_picker::downloading_piece const*&, libtorrent::piece_picker::downloading_piece const*&> (a2=@0xb4d148b4: 0xb03e7030,
    a1=<synthetic pointer>: <optimized out>, this=0xb4d1481c) at /usr/include/boost/bind/bind.hpp:1318
#5  __gnu_cxx::__ops::_Val_comp_iter<boost::_bi::bind_t<bool, boost::_mfi::cmf2<bool, libtorrent::piece_picker, libtorrent::piece_picker::downloading_piece const*, libtorrent::piece_picker::downloading_piece const*>, boost::_bi::list3<boost::_bi::value<libtorrent::piece_picker const*>, boost::arg<1>, boost::arg<2> > > >::operator()<libtorrent::piece_picker::downloading_piece const*, libtorrent::piece_picker::downloading_piece const**> (__it=0xb4d148b4, __val=<synthetic pointer>: <optimized out>, this=0xb4d1481c) at /usr/include/c++/9/bits/predefined_ops.h:215
#6  std::__unguarded_linear_insert<libtorrent::piece_picker::downloading_piece const**, __gnu_cxx::__ops::_Val_comp_iter<boost::_bi::bind_t<bool, boost::_mfi::cmf2<bool, libtorrent::piece_picker, libtorrent::piece_picker::downloading_piece const*, libtorrent::piece_picker::downloading_piece const*>, boost::_bi::list3<boost::_bi::value<libtorrent::piece_picker const*>, boost::arg<1>, boost::arg<2> > > > > (
    __last=__last@entry=0xb4d148b8, __comp=...) at /usr/include/c++/9/bits/stl_algo.h:1827
#7  0xb582b8e0 in std::__insertion_sort<libtorrent::piece_picker::downloading_piece const**, __gnu_cxx::__ops::_Iter_comp_iter<boost::_bi::bind_t<bool, boost::_mfi::cmf2<bool, libtorrent::piece_picker, libtorrent::piece_picker::downloading_piece const*, libtorrent::piece_picker::downloading_piece const*>, boost::_bi::list3<boost::_bi::value<libtorrent::piece_picker const*>, boost::arg<1>, boost::arg<2> > > > > (__first=0xb4d148b0,
    __last=__last@entry=0xb4d148d0, __comp=...) at /usr/include/c++/9/bits/move.h:99
#8  0xb582a8e6 in std::__final_insertion_sort<libtorrent::piece_picker::downloading_piece const**, __gnu_cxx::__ops::_Iter_comp_iter<boost::_bi::bind_t<bool, boost::_mfi::cmf2<bool, libtorrent::piece_picker, libtorrent::piece_picker::downloading_piece const*, libtorrent::piece_picker::downloading_piece const*>, boost::_bi::list3<boost::_bi::value<libtorrent::piece_picker const*>, boost::arg<1>, boost::arg<2> > > > > (__comp=...,
    __last=0xb4d148d0, __first=<optimized out>) at ../../src/piece_picker.cpp:2169
#9  std::__sort<libtorrent::piece_picker::downloading_piece const**, __gnu_cxx::__ops::_Iter_comp_iter<boost::_bi::bind_t<bool, boost::_mfi::cmf2<bool, libtorrent::piece_picker, libtorrent::piece_picker::downloading_piece const*, libtorrent::piece_picker::downloading_piece const*>, boost::_bi::list3<boost::_bi::value<libtorrent::piece_picker const*>, boost::arg<1>, boost::arg<2> > > > > (__comp=..., __last=0xb4d148d0,
    __first=<optimized out>) at /usr/include/c++/9/bits/stl_algo.h:1970
#10 std::sort<libtorrent::piece_picker::downloading_piece const**, boost::_bi::bind_t<bool, boost::_mfi::cmf2<bool, libtorrent::piece_picker, libtorrent::piece_picker::downloading_piece const*, libtorrent::piece_picker::downloading_piece const*>, boost::_bi::list3<boost::_bi::value<libtorrent::piece_picker const*>, boost::arg<1>, boost::arg<2> > > > (__comp=..., __last=0xb4d148d0, __first=<optimized out>)
    at /usr/include/c++/9/bits/stl_algo.h:4860
#11 libtorrent::piece_picker::pick_pieces (this=this@entry=0xae288a88, pieces=..., interesting_blocks=std::vector of length 0, capacity 100, num_blocks=num_blocks@entry=4, prefer_contiguous_blocks=<optimized out>,
    prefer_contiguous_blocks@entry=0, peer=<optimized out>, peer@entry=0xb446f250, options=<optimized out>, suggested_pieces=..., num_peers=<optimized out>, num_peers@entry=29, pc=...)
    at ../../src/piece_picker.cpp:2074
#12 0xb583358a in libtorrent::request_a_block (t=..., c=...) at /usr/include/c++/9/bits/stl_vector.h:915
#13 0xb57fddec in libtorrent::peer_connection::incoming_unchoke (this=this@entry=0xafc012b0) at ../../src/peer_connection.cpp:1646
#14 0xb577dffa in libtorrent::bt_peer_connection::on_unchoke (this=0xafc012b0, received=<optimized out>) at ../../src/bt_peer_connection.cpp:971
#15 0xb5781288 in libtorrent::bt_peer_connection::dispatch_message (received=1, this=0xafc012b0) at ../../src/bt_peer_connection.cpp:1965
#16 libtorrent::bt_peer_connection::dispatch_message (this=0xafc012b0, received=1) at ../../src/bt_peer_connection.cpp:1916
#17 0xb5785778 in libtorrent::bt_peer_connection::on_receive_impl (this=this@entry=0xafc012b0, bytes_transferred=<optimized out>) at ../../src/bt_peer_connection.cpp:3536
#18 0xb5786ea0 in libtorrent::bt_peer_connection::on_receive (this=0xafc012b0, error=..., bytes_transferred=<optimized out>) at ../../src/bt_peer_connection.cpp:2634
#19 0xb5807038 in libtorrent::peer_connection::receive_data_impl (this=this@entry=0xafc012b0, error=..., bytes_transferred=<optimized out>, read_loops=0) at ../../src/peer_connection.cpp:6191
#20 0xb58073fa in libtorrent::peer_connection::on_receive_data_nb (this=0xafc012b0, error=..., bytes_transferred=<optimized out>) at ../../src/peer_connection.cpp:6078
#21 0xb592e388 in boost::function2<void, boost::system::error_code const&, unsigned int>::operator() (a1=<optimized out>, a0=..., this=0xb4d14d60) at /usr/include/boost/function/function_template.hpp:682
#22 boost::_bi::list2<boost::_bi::value<boost::system::error_code>, boost::_bi::value<unsigned int> >::operator()<boost::function2<void, boost::system::error_code const&, unsigned int>, boost::_bi::list0> (
    a=<synthetic pointer>..., f=..., this=0xb4d14d70) at /usr/include/boost/bind/bind.hpp:319
#23 boost::_bi::bind_t<void, boost::function2<void, boost::system::error_code const&, unsigned int>, boost::_bi::list2<boost::_bi::value<boost::system::error_code>, boost::_bi::value<unsigned int> > >::operator() (
    this=0xb4d14d60) at /usr/include/boost/bind/bind.hpp:1294
#24 boost::asio::asio_handler_invoke<boost::_bi::bind_t<void, boost::function2<void, boost::system::error_code const&, unsigned int>, boost::_bi::list2<boost::_bi::value<boost::system::error_code>, boost::_bi::value<unsigned int> > > > (function=...) at /usr/include/boost/asio/handler_invoke_hook.hpp:69
#25 boost_asio_handler_invoke_helpers::invoke<boost::_bi::bind_t<void, boost::function2<void, boost::system::error_code const&, unsigned int>, boost::_bi::list2<boost::_bi::value<boost::system::error_code>, boost::_bi::--Type <RET> for more, q to quit, c to continue without paging--
value<unsigned int> > >, boost::_bi::bind_t<void, boost::function2<void, boost::system::error_code const&, unsigned int>, boost::_bi::list2<boost::_bi::value<boost::system::error_code>, boost::_bi::value<unsigned int> > > > (context=..., function=...) at /usr/include/boost/asio/detail/handler_invoke_helpers.hpp:37
#26 boost::asio::detail::handler_work<boost::_bi::bind_t<void, boost::function2<void, boost::system::error_code const&, unsigned int>, boost::_bi::list2<boost::_bi::value<boost::system::error_code>, boost::_bi::value<unsigned int> > >, boost::asio::system_executor>::complete<boost::_bi::bind_t<void, boost::function2<void, boost::system::error_code const&, unsigned int>, boost::_bi::list2<boost::_bi::value<boost::system::error_code>, boost::_bi::value<unsigned int> > > > (this=<synthetic pointer>, handler=..., function=...) at /usr/include/boost/asio/detail/handler_work.hpp:82
#27 boost::asio::detail::completion_handler<boost::_bi::bind_t<void, boost::function2<void, boost::system::error_code const&, unsigned int>, boost::_bi::list2<boost::_bi::value<boost::system::error_code>, boost::_bi::value<unsigned int> > > >::do_complete (owner=0x56c6b8, base=<optimized out>) at /usr/include/boost/asio/detail/completion_handler.hpp:70
#28 0xb578f304 in boost::asio::detail::scheduler_operation::complete (bytes_transferred=<optimized out>, ec=..., owner=0x56c6b8, this=0xafc29e68) at /usr/include/boost/asio/detail/scheduler_operation.hpp:40
#29 boost::asio::detail::scheduler::do_run_one (ec=..., this_thread=..., lock=..., this=0x56c6b8) at /usr/include/boost/asio/detail/impl/scheduler.ipp:401
#30 boost::asio::detail::scheduler::run (this=0x56c6b8, ec=...) at /usr/include/boost/asio/detail/impl/scheduler.ipp:154
#31 0xb5842588 in boost::asio::io_context::run (this=0x6c3614) at /usr/include/boost/asio/impl/io_context.ipp:62
#32 0xb579ac92 in boost::asio::detail::boost_asio_detail_posix_thread_function (arg=0x6c2338) at /usr/include/boost/asio/detail/impl/posix_thread.ipp:74
#33 0xb6e9ed3e in start_thread (arg=0x4ac76531) at pthread_create.c:479
#34 0xb6f5e17c in ?? () at ../sysdeps/unix/sysv/linux/arm/clone.S:73 from /lib/arm-linux-gnueabihf/libc.so.6
Backtrace stopped: previous frame identical to this frame (corrupt stack?)

Change History (4)

comment:1 Changed 12 months ago by bro

You should report this at the libtorrent issue tracker: https://github.com/arvidn/libtorrent

comment:2 Changed 12 months ago by skuizy

  • Summary changed from Deluge segfaults when starting to recieve packets from certain torrents to Deluge segfaults when starting to receive packets from some torrents

comment:3 Changed 12 months ago by skuizy

comment:4 Changed 11 months ago by Cas

  • Component changed from Unknown to libtorrent
  • Milestone changed from needs verified to not applicable
Note: See TracTickets for help on using tickets.