DD-L / lproxy

8 stars 3 forks source link

"Program received signal SIGSEGV, Segmentation fault. if (descriptor_data->shutdown_)" [Ubuntu 14.04.1 LTS 64bit] #130

Closed DD-L closed 8 years ago

DD-L commented 8 years ago

相关链接: https://svn.boost.org/trac/boost/ticket/7611

2016-Apr-22 13:30:41.860226 [DEBUG] Verify completed    [tid:7ffff65c3700] session_local.cpp:295 right_read_handler
2016-Apr-22 13:30:41.860467 [DEBUG] ---> bytes_transferred = 3  [tid:7ffff7fef780] session_local.cpp:479 left_read_socks5_step1
2016-Apr-22 13:30:41.860658 [DEBUG] read data from client: 5 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0  [tid:7ffff7fef780] session_local.cpp:484 left_read_socks5_step1
2016-Apr-22 13:30:41.860676 [DEBUG] send socks5_data to client: 5 0     [tid:7ffff7fef780] session_local.cpp:497 left_read_socks5_step1
2016-Apr-22 13:30:41.860775 [DEBUG] ---> bytes_transferred = 2  [tid:7ffff7fef780] session_local.cpp:543 left_write_socks5_step1_handler
2016-Apr-22 13:30:41.860783 [DEBUG] begin async_read_some from client   [tid:7ffff7fef780] session_local.cpp:546 left_write_socks5_step1_handler
2016-Apr-22 13:30:41.862293 [DEBUG] ---> bytes_transferred = 24 [tid:7ffff7fef780] session_local.cpp:565 left_read_handler
2016-Apr-22 13:30:41.862501 [DEBUG] read data from client: 5 1 0 3 11 73 63 30 2e 68 61 6f 31 32 33 69 6d 67 2e 63 6f 6d 0 50 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0   [tid:7ffff7fef780] session_local.cpp:572 left_read_handler
2016-Apr-22 13:30:41.862571 [DEBUG] pack data/zipdata: 0 6 0 18 be 9c e3 39 b9 10 8 cf 15 73 c3 66 61 56 f2 92 82 5 f9 e5 94 96 ce d1   [tid:7ffff7fef780] session_local.cpp:725 pack_data
2016-Apr-22 13:30:41.862655 [DEBUG] and send to server. [tid:7ffff7fef780] session_local.cpp:585 left_read_handler
2016-Apr-22 13:30:41.863201 [DEBUG] ---> bytes_transferred = 28 [tid:7ffff65c3700] session_local.cpp:635 right_write_handler
2016-Apr-22 13:30:41.863706 [DEBUG] ---> bytes_transferred = 639    [tid:7ffff65c3700] session_local.cpp:238 right_read_handler
2016-Apr-22 13:30:41.863715 [DEBUG] lss_reply->version() = 0    [tid:7ffff65c3700] session_local.cpp:240 right_read_handler
2016-Apr-22 13:30:41.863720 [DEBUG] lss_reply->type() = 6   [tid:7ffff65c3700] session_local.cpp:241 right_read_handler

Program received signal SIGSEGV, Segmentation fault.
0x000000000041a5d1 in boost::asio::detail::epoll_reactor::start_op (this=0x179fd80, op_type=1, descriptor=40, descriptor_data=@0x17fdc58: 0x0, op=0x17a40c0, is_continuation=false, 
    allow_speculative=true) at /opt/lproxy/src/core/lss/../../..//contrib/boost/boost_1_57_0/boost/asio/detail/impl/epoll_reactor.ipp:219
219   if (descriptor_data->shutdown_)
(gdb) p descriptor_data
$1 = (boost::asio::detail::epoll_reactor::per_descriptor_data &) @0x17fdc58: 0x0
(gdb) l
214     return;
215   }
216 
217   mutex::scoped_lock descriptor_lock(descriptor_data->mutex_);
218 
219   if (descriptor_data->shutdown_)
220   {
221     post_immediate_completion(op, is_continuation);
222     return;
223   }
(gdb) bt
#0  0x000000000041a5d1 in boost::asio::detail::epoll_reactor::start_op (this=0x179fd80, op_type=1, descriptor=40, descriptor_data=@0x17fdc58: 0x0, op=0x17a40c0, is_continuation=false, 
    allow_speculative=true) at /opt/lproxy/src/core/lss/../../..//contrib/boost/boost_1_57_0/boost/asio/detail/impl/epoll_reactor.ipp:219
#1  0x000000000041d3c0 in boost::asio::detail::reactive_socket_service_base::start_op (this=0x17a28b8, impl=..., op_type=1, op=0x17a40c0, is_continuation=false, is_non_blocking=true, 
    noop=false) at /opt/lproxy/src/core/lss/../../..//contrib/boost/boost_1_57_0/boost/asio/detail/impl/reactive_socket_service_base.ipp:214
#2  0x0000000000457bfe in boost::asio::detail::reactive_socket_service_base::async_send<boost::asio::detail::consuming_buffers<boost::asio::const_buffer, boost::array<boost::asio::const_buffer, 5ul> >, boost::asio::detail::write_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >, boost::array<boost::asio::const_buffer, 5ul>, boost::asio::detail::transfer_all_t, boost::_bi::bind_t<void, boost::_mfi::mf0<void, lproxy::local::session>, boost::_bi::list1<boost::_bi::value<std::shared_ptr<lproxy::local::session> > > > > > (this=0x17a28b8, impl=..., buffers=..., flags=0, handler=...)
    at /opt/lproxy/src/core/lss/../../..//contrib/boost/boost_1_57_0/boost/asio/detail/reactive_socket_service_base.hpp:216
#3  0x0000000000454ef0 in boost::asio::stream_socket_service<boost::asio::ip::tcp>::async_send<boost::asio::detail::consuming_buffers<boost::asio::const_buffer, boost::array<boost::asio::const_buffer, 5ul> >, boost::asio::detail::write_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >, boost::array<boost::asio::const_buffer, 5ul>, boost::asio::detail::transfer_all_t, boost::_bi::bind_t<void, boost::_mfi::mf0<void, lproxy::local::session>, boost::_bi::list1<boost::_bi::value<std::shared_ptr<lproxy::local::session> > > > > >(boost::asio::detail::reactive_socket_service<boost::asio::ip::tcp>::implementation_type&, boost::asio::detail::consuming_buffers<boost::asio::const_buffer, boost::array<boost::asio::const_buffer, 5ul> > const&, int, boost::asio::detail::write_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >, boost::array<boost::asio::const_buffer, 5ul>, boost::asio::detail::transfer_all_t, boost::_bi::bind_t<void, boost::_mfi::mf0<void, lproxy::local::session>, boost::_bi::list1<boost::_bi::value<std::shared_ptr<lproxy::local::session> > > > >&&) (this=0x17a2890, impl=..., buffers=..., flags=0, handler=<unknown type in /opt/lproxy/bin/lsslocal.exe, CU 0x66ee9, DIE 0xdd2c9>)
    at /opt/lproxy/src/core/lss/../../..//contrib/boost/boost_1_57_0/boost/asio/stream_socket_service.hpp:330
#4  0x0000000000452634 in boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >::async_write_some<boost::asio::detail::consuming_buffers<boost::asio::const_buffer, boost::array<boost::asio::const_buffer, 5ul> >, boost::asio::detail::write_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >, boost::array<boost::asio::const_buffer, 5ul>, boost::asio::detail::transfer_all_t, boost::_bi::bind_t<void, boost::_mfi::mf0<void, lproxy::local::session>, boost::_bi::list1<boost::_bi::value<std::shared_ptr<lproxy::local::session> > > > > >(boost::asio::detail::consuming_buffers<boost::asio::const_buffer, boost::array<boost::asio::const_buffer, 5ul> > const&, boost::asio::detail::write_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >, boost::array<boost::asio::const_buffer, 5ul>, boost::asio::detail::transfer_all_t, boost::_bi::bind_t<void, boost::_mfi::mf0<void, lproxy::local::session>, boost::_bi::list1<boost::_bi::value<std::shared_ptr<lproxy::local::session> > > > >&&) (this=0x17fdc50, buffers=..., handler=<unknown type in /opt/lproxy/bin/lsslocal.exe, CU 0x66ee9, DIE 0xd8be6>)
    at /opt/lproxy/src/core/lss/../../..//contrib/boost/boost_1_57_0/boost/asio/basic_stream_socket.hpp:732
#5  0x000000000044f3a8 in boost::asio::detail::write_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >, boost::array<boost::asio::const_buffer, 5ul>, boost::asio::detail::transfer_all_t, boost::_bi::bind_t<void, boost::_mfi::mf0<void, lproxy::local::session>, boost::_bi::list1<boost::_bi::value<std::shared_ptr<lproxy::local::session> > > > >::operator() (this=0x7fffffffdb80, ec=..., bytes_transferred=0, start=1)
    at /opt/lproxy/src/core/lss/../../..//contrib/boost/boost_1_57_0/boost/asio/impl/write.hpp:181
#6  0x000000000044b323 in boost::asio::async_write<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >, boost::array<boost::asio::const_buffer, 5ul>, boost::_bi::bind_t<void, boost::_mfi::mf0<void, lproxy::local::session>, boost::_bi::list1<boost::_bi::value<std::shared_ptr<lproxy::local::session> > > > >(boost::asio::---Type <return> to continue, or q <return> to quit---
basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service<boost::asio::ip::tcp> >&, boost::array<boost::asio::const_buffer, 5ul> const&, boost::_bi::bind_t<void, boost::_mfi::mf0<void, lproxy::local::session>, boost::_bi::list1<boost::_bi::value<std::shared_ptr<lproxy::local::session> > > >&&) (s=..., buffers=..., 
    handler=<unknown type in /opt/lproxy/bin/lsslocal.exe, CU 0x66ee9, DIE 0xcdc74>) at /opt/lproxy/src/core/lss/../../..//contrib/boost/boost_1_57_0/boost/asio/impl/write.hpp:621
#7  0x000000000043fb06 in lproxy::local::session::left_read_handler (this=0x17fdbe0, error=..., bytes_transferred=0, data_left=std::shared_ptr (count 3, weak 0) 0x7fffe80114c0)
    at session_local.cpp:614
#8  0x0000000000459c2e in boost::_mfi::mf3<void, lproxy::local::session, boost::system::error_code const&, unsigned long, std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > > >::call<std::shared_ptr<lproxy::local::session>, boost::system::error_code const, unsigned long, std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > > > (this=0x7fffffffe1a0, u=std::shared_ptr (count 3, weak 1) 0x17fdbe0, b1=..., b2=@0x7fffffffdf40: 0, 
    b3=std::shared_ptr (count 3, weak 0) 0x7fffe80114c0) at /opt/lproxy/src/core/lss/../../..//contrib/boost/boost_1_57_0/boost/bind/mem_fn_template.hpp:384
#9  0x0000000000457494 in boost::_mfi::mf3<void, lproxy::local::session, boost::system::error_code const&, unsigned long, std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > > >::operator()<std::shared_ptr<lproxy::local::session> > (this=0x7fffffffe1a0, u=std::shared_ptr (count 3, weak 1) 0x17fdbe0, a1=..., a2=0, 
    a3=std::shared_ptr (count 3, weak 0) 0x7fffe80114c0) at /opt/lproxy/src/core/lss/../../..//contrib/boost/boost_1_57_0/boost/bind/mem_fn_template.hpp:399
#10 0x0000000000454bcc in boost::_bi::list4<boost::_bi::value<std::shared_ptr<lproxy::local::session> >, boost::arg<1>, boost::arg<2>, boost::_bi::value<std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > > > >::operator()<boost::_mfi::mf3<void, lproxy::local::session, boost::system::error_code const&, unsigned long, std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > > >, boost::_bi::list2<boost::system::error_code const&, unsigned long const&> > (this=0x7fffffffe1b0, f=..., a=...) at /opt/lproxy/src/core/lss/../../..//contrib/boost/boost_1_57_0/boost/bind/bind.hpp:457
#11 0x0000000000452222 in boost::_bi::bind_t<void, boost::_mfi::mf3<void, lproxy::local::session, boost::system::error_code const&, unsigned long, std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > > >, boost::_bi::list4<boost::_bi::value<std::shared_ptr<lproxy::local::session> >, boost::arg<1>, boost::arg<2>, boost::_bi::value<std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > > > > >::operator()<boost::system::error_code, unsigned long> (
    this=0x7fffffffe1a0, a1=..., a2=@0x7fffffffe1e0: 0) at /opt/lproxy/src/core/lss/../../..//contrib/boost/boost_1_57_0/boost/bind/bind_template.hpp:102
#12 0x000000000045d23b in boost::asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf3<void, lproxy::local::session, boost::system::error_code const&, unsigned long, std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > > >, boost::_bi::list4<boost::_bi::value<std::shared_ptr<lproxy::local::session> >, boost::arg<1>, boost::arg<2>, boost::_bi::value<std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > > > > >, boost::system::error_code, unsigned long>::operator() (this=0x7fffffffe1a0) at /opt/lproxy/src/core/lss/../../..//contrib/boost/boost_1_57_0/boost/asio/detail/bind_handler.hpp:127
#13 0x000000000045bd07 in boost::asio::asio_handler_invoke<boost::asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf3<void, lproxy::local::session, boost::system::error_code const&, unsigned long, std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > > >, boost::_bi::list4<boost::_bi::value<std::shared_ptr<lproxy::local::session> >, boost::arg<1>, boost::arg<2>, boost::_bi::value<std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > > > > >, boost::system::error_code, unsigned long> > (function=...) at /opt/lproxy/src/core/lss/../../..//contrib/boost/boost_1_57_0/boost/asio/handler_invoke_hook.hpp:69
#14 0x0000000000459dd4 in boost_asio_handler_invoke_helpers::invoke<boost::asio::detail::binder2<boost::_bi::bind_t<void, boost::_mfi::mf3<void, lproxy::local::session, boost::system::error_code const&, unsigned long, std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > > >, boost::_bi::list4<boost::_bi::value<std::shared_ptr<lproxy::local::session> >, boost::arg<1>, boost::arg<2>, boost::_bi::value<std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned cha---Type <return> to continue, or q <return> to quit---
r> > > > > >, boost::system::error_code, unsigned long>, boost::_bi::bind_t<void, boost::_mfi::mf3<void, lproxy::local::session, boost::system::error_code const&, unsigned long, std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > > >, boost::_bi::list4<boost::_bi::value<std::shared_ptr<lproxy::local::session> >, boost::arg<1>, boost::arg<2>, boost::_bi::value<std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > > > > > > (function=..., 
    context=...) at /opt/lproxy/src/core/lss/../../..//contrib/boost/boost_1_57_0/boost/asio/detail/handler_invoke_helpers.hpp:37
#15 0x0000000000457895 in boost::asio::detail::reactive_socket_recv_op<boost::asio::mutable_buffers_1, boost::_bi::bind_t<void, boost::_mfi::mf3<void, lproxy::local::session, boost::system::error_code const&, unsigned long, std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > > >, boost::_bi::list4<boost::_bi::value<std::shared_ptr<lproxy::local::session> >, boost::arg<1>, boost::arg<2>, boost::_bi::value<std::shared_ptr<std::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> > > > > > >::do_complete (owner=0x179f790, base=0x7fffe800e6e0) at /opt/lproxy/src/core/lss/../../..//contrib/boost/boost_1_57_0/boost/asio/detail/reactive_socket_recv_op.hpp:110
#16 0x00000000004196ba in boost::asio::detail::task_io_service_operation::complete (this=0x7fffe800e6e0, owner=..., ec=..., bytes_transferred=0)
    at /opt/lproxy/src/core/lss/../../..//contrib/boost/boost_1_57_0/boost/asio/detail/task_io_service_operation.hpp:38
#17 0x000000000041b4bd in boost::asio::detail::epoll_reactor::descriptor_state::do_complete (owner=0x179f790, base=0x17a99e0, ec=..., bytes_transferred=1)
    at /opt/lproxy/src/core/lss/../../..//contrib/boost/boost_1_57_0/boost/asio/detail/impl/epoll_reactor.ipp:651
#18 0x00000000004196ba in boost::asio::detail::task_io_service_operation::complete (this=0x17a99e0, owner=..., ec=..., bytes_transferred=1)
    at /opt/lproxy/src/core/lss/../../..//contrib/boost/boost_1_57_0/boost/asio/detail/task_io_service_operation.hpp:38
#19 0x000000000041c040 in boost::asio::detail::task_io_service::do_run_one (this=0x179f790, lock=..., this_thread=..., ec=...)
    at /opt/lproxy/src/core/lss/../../..//contrib/boost/boost_1_57_0/boost/asio/detail/impl/task_io_service.ipp:372
#20 0x000000000041baa3 in boost::asio::detail::task_io_service::run (this=0x179f790, ec=...)
    at /opt/lproxy/src/core/lss/../../..//contrib/boost/boost_1_57_0/boost/asio/detail/impl/task_io_service.ipp:149
#21 0x000000000041c335 in boost::asio::io_service::run (this=0x7fffffffe500) at /opt/lproxy/src/core/lss/../../..//contrib/boost/boost_1_57_0/boost/asio/impl/io_service.ipp:59
#22 0x00000000004169da in main (argc=1, argv=0x7fffffffe818) at local.cpp:127
(gdb) l local.cpp:127
122     boost::asio::io_service io_service;
123 
124     lproxy::local::lss_server s(io_service, bind_addr, bind_port);
125     for (;;) {
126         try {
127             io_service.run();
128             break;
129         }
130         catch (boost::system::system_error const& e) {
131             logerror(e.what());
(gdb) l epoll_reactor.ipp:219
214     return;
215   }
216 
217   mutex::scoped_lock descriptor_lock(descriptor_data->mutex_);
218 
219   if (descriptor_data->shutdown_)
220   {
221     post_immediate_completion(op, is_continuation);
222     return;
223   }
(gdb) l 209
204 }
205 
206 void epoll_reactor::start_op(int op_type, socket_type descriptor,
207     epoll_reactor::per_descriptor_data& descriptor_data, reactor_op* op,
208     bool is_continuation, bool allow_speculative)
209 {
210   if (!descriptor_data)
211   {
212     op->ec_ = boost::asio::error::bad_descriptor;
213     post_immediate_completion(op, is_continuation);
(gdb) 
214     return;
215   }
216 
217   mutex::scoped_lock descriptor_lock(descriptor_data->mutex_);
218 
219   if (descriptor_data->shutdown_)
220   {
221     post_immediate_completion(op, is_continuation);
222     return;
223   }
(gdb) 

程度:致命 频率:偶现 临时解决方案:带 -k--keep-running 参数的启动程序

DD-L commented 8 years ago

此问题大概是 socket 在另外一个线程中被执行了 close ,而且 socket 所在的 session 对象被整体析构掉了,所以才会导致

219   if (descriptor_data->shutdown_)
(gdb) p descriptor_data
$1 = (boost::asio::detail::epoll_reactor::per_descriptor_data &) @0x17fdc58: 0x0

解决办法是,将 socket 的 close, 放到 session 析构函数里执行, 即可保证 close 只会被执行一次,而无需关心多线程。此外 添加 socket.cancel 是个好帮手,它可以立即取消未完成的异步。

此 bug 在 即将发布的 v0.2.0 版本中被彻底修复。