#3324: Deluge segfaults when starting to recieve packets from certain torrents
----------------------------+----------------------
 Reporter:  skuizy          |       Type:  bug
   Status:  new             |   Priority:  critical
Milestone:  needs verified  |  Component:  Unknown
  Version:  develop         |   Keywords:  segfault
----------------------------+----------------------
 {{{
 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?)

 }}}

--
Ticket URL: <https://dev.deluge-torrent.org/ticket/3324>
Deluge <https://deluge-torrent.org/>
Deluge Project

-- 
You received this message because you are subscribed to the Google Groups 
"Deluge Dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/deluge-dev/045.efad3e75662b863e67c372dad57b7e76%40deluge-torrent.org.

Reply via email to