Skip to content
This repository was archived by the owner on Apr 24, 2022. It is now read-only.

asio crash on socket disconnect #887

Closed
joequant opened this issue Mar 13, 2018 · 3 comments
Closed

asio crash on socket disconnect #887

joequant opened this issue Mar 13, 2018 · 3 comments

Comments

@joequant
Copy link
Contributor

I've started to get crashes when ethminer connects and disconnects to the stratum server.
The segfault occurs in asio, and appears to be due to changes in EthStratumClient.cpp starting after commit 76943 on 27 Feb.

Will try to get more information.

@joequant
Copy link
Contributor Author

Here is the stack trace

#0 boost::asio::detail::scheduler::post_immediate_completion (this=0x34,
op=0x7fffc435e930, is_continuation=false)
at /home/joe/.hunter/_Base/59b2b88/8f55c83/c20b399/Install/include/boost/asio/detail/impl/scheduler.ipp:282
#1 0x00000000004e4591 in boost::asio::detail::epoll_reactor::start_op (
this=0x7fff743007a0, op_type=op_type@entry=1,
descriptor=descriptor@entry=-536806608,
descriptor_data=@0x7fffbc120fe0: 0x7fffdc003100,
op=op@entry=0x7fffc435e930, is_continuation=is_continuation@entry=false,
allow_speculative=true)
at /home/joe/.hunter/_Base/59b2b88/8f55c83/c20b399/Install/include/boost/asio/detail/impl/epoll_reactor.ipp:301
#2 0x00000000004e519b in boost::asio::detail::reactive_socket_service_base::start_op (this=0x7fff742d7408, impl=..., op_type=1, op=0x7fffc435e930,
is_continuation=, is_non_blocking=,
noop=false)
at /home/joe/.hunter/_Base/59b2b88/8f55c83/c20b399/Install/include/boost/asio/detail/impl/reactive_socket_service_base.ipp:246
#3 0x00000000004ecd32 in boost::asio::detail::reactive_socket_service_base::async_send<boost::asio::const_buffers_1, boost::asio::detail::write_op<boost::asio::basic_stream_socketboost::asio::ip::tcp, boost::asio::const_buffers_1, boost::asio::const_buffer const*, boost::asio::detail::transfer_all_t, boost::asio::detail::write_dynbuf_op<boost::asio::basic_stream_socketboost::asio::ip::tcp, boost::asio::basic_streambuf_ref<std::allocator >, boost::asio::detail::transfer_all_t, boost::_bi::bind_t<void, boost::_mfi::mf1<void, EthStratumClient, boost::system::error_code const&>, boost::_bi::list2<boost::_bi::value<EthStratumClient*>, boost::arg<1> ()()> > > > > (handler=..., flags=0, buffers=...,
impl=..., this=0x7fff742d7408)
at /home/joe/.hunter/_Base/59b2b88/8f55c83/c20b399/Install/include/boost/asio/detail/reactive_socket_service_base.hpp:278
#4 boost::asio::basic_stream_socketboost::asio::ip::tcp::async_write_some<boost::asio::const_buffers_1, boost::asio::detail::write_op<boost::asio::basic_stream_socketboost::asio::ip::tcp, boost::asio::const_buffers_1, boost::asio::const_buffer const
, boost::asio::detail::transfer_all_t, boost::asio::detail::write_dynbuf_op<boost::asio::basic_stream_socketboost::asio::ip::tcp, boost::asio::basic_streambuf_ref<std::allocator >, boost::asio::detail::transfer_all_t, boost::_bi::bind_t<void, boost::_mfi::mf1<void, EthStratumClient, boost::system::error_code const&>, boost::_bi::list2<boost::_bi::value<EthStratumClient*>, boost::arg<1> ()()> > > > > (handler=..., buffers=..., this=0x7fffbc120fd0)
at /home/joe/.hunter/_Base/59b2b88/8f55c83/c20b399/Install/include/boost/asio/basic_stream_socket.hpp:787
#5 boost::asio::detail::write_op<boost::asio::basic_stream_socketboost::asio:ip::tcp, boost::asio::const_buffers_1, boost::asio::const_buffer const
, boost::asio::detail::transfer_all_t, boost::asio::detail::write_dynbuf_op<boost::asio::basic_stream_socketboost::asio::ip::tcp, boost::asio::basic_streambuf_ref<std::allocator >, boost::asio::detail::transfer_all_t, boost::_bi::bind_t<void, boost::_mfi::mf1<void, EthStratumClient, boost::system::error_code const&>, boost::_bi::list2<boost::_bi::value<EthStratumClient*>, boost::arg<1> ()()> > > >::operator() (this=this@entry=0x7fffe9843940, ec=...,
bytes_transferred=bytes_transferred@entry=0, start=start@entry=1)
at /home/joe/.hunter/_Base/59b2b88/8f55c83/c20b399/Install/include/boost/asio/impl/write.hpp:259
#6 0x00000000004ecebb in boost::asio::detail::start_write_buffer_sequence_op<boost::asio::basic_stream_socketboost::asio::ip::tcp, boost::asio::const_buffers_1, boost::asio::const_buffer const
, boost::asio::detail::transfer_all_t, boost::asio::detail::write_dynbuf_op<boost::asio::basic_stream_socketboost::asio::ip::tcp, boost::asio::basic_streambuf_ref<std::allocator >, boost::asio::detail::transfer_all_t, boost::_bi::bind_t<void, boost::_mfi::mf1<void, EthStratumClient, boost::system::error_code const&>, boost::_bi::list2<boost::_bi::value<EthStratumClient*>, boost::arg<1> ()()> > > > (handler=..., buffers=...,
stream=..., completion_condition=...)
at /home/joe/.hunter/_Base/59b2b88/8f55c83/c20b399/Install/include/boost/asio/impl/write.hpp:345
#7 boost::asio::async_write<boost::asio::basic_stream_socketboost::asio::ip::tcp, boost::asio::const_buffers_1, boost::asio::detail::transfer_all_t, boost::asio::detail::write_dynbuf_op<boost::asio::basic_stream_socketboost::asio::ip::tcp, boost::asio::basic_streambuf_ref<std::allocator >, boost::asio::detail::transfer_all_t, boost::_bi::bind_t<void, boost::_mfi::mf1<void, EthStratumClient, boost::system::error_code const&>, boost::_bi::list2<boost::_bi::value<EthStratumClient
>, boost::arg<1> ()()> > > > (handler=..., buffers=..., s=...,
completion_condition=...)
at /home/joe/.hunter/_Base/59b2b88/8f55c83/c20b399/Install/include/boost/asio/impl/write.hpp:411
#8 boost::asio::detail::write_dynbuf_op<boost::asio::basic_stream_socketboost::asio::ip::tcp, boost::asio::basic_streambuf_ref<std::allocator >, boost::asio::detail::transfer_all_t, boost::_bi::bind_t<void, boost::_mfi::mf1<void, EthStratumClient, boost::system::error_code const&>, boost::_bi::list2<boost::_bi::value<EthStratumClient
>, boost::arg<1> ()()> > >::operator() (start=1,
bytes_transferred=0, ec=..., this=)
at /home/joe/.hunter/_Base/59b2b88/8f55c83/c20b399/Install/include/boost/asio/impl/write.hpp:487
#9 boost::asio::async_write<boost::asio::basic_stream_socketboost::asio::ip::tcp, boost::asio::basic_streambuf_ref<std::allocator >, boost::asio::detail::transfer_all_t, boost::_bi::bind_t<void, boost::_mfi::mf1<void, EthStratumClient, boost::system::error_code const&>, boost::_bi::list2<boost::_bi::value<EthStratumClient
>, boost::arg<1> ()()> > > (s=..., buffers=..., handler=...,
completion_condition=...)
at /home/joe/.hunter/_Base/59b2b88/8f55c83/c20b399/Install/include/boost/asio/impl/write.hpp:635
#10 0x00000000004f1ddf in boost::asio::async_write<boost::asio::basic_stream_socketboost::asio::ip::tcp, boost::asio::basic_streambuf_ref<std::allocator >, boost::_bi::bind_t<void, boost::_mfi::mf1<void, EthStratumClient, boost::system::error_code const&>, boost::_bi::list2<boost::_bi::value<EthStratumClient
>, boost::arg<1> ()()> > > (handler=..., buffers=..., s=...)
at /home/joe/.hunter/_Base/59b2b88/8f55c83/c20b399/Install/include/boost/asio/impl/write.hpp:606
#11 boost::asio::async_write<boost::asio::basic_stream_socketboost::asio::ip::tcp, std::allocator, boost::_bi::bind_t<void, boost::_mfi::mf1<void, EthStratumClient, boost::system::error_code const&>, boost::_bi::list2<boost::_bi::value<EthStratumClient
>, boost::arg<1> ()()> > > (handler=..., b=..., s=...)
at /home/joe/.hunter/_Base/59b2b88/8f55c83/c20b399/Install/include/boost/asio/impl/write.hpp:651
#12 EthStratumClient::submitSolution (this=0xa54170, solution=...)
at /home/joe/bench/git/ethminer/libpoolprotocols/stratum/EthStratumClient.cpp:667
#13 0x00000000004d1bd3 in dev::eth::PoolManager::<lambda(dev::eth::Solution)>::operator()(dev::eth::Solution) const (__closure=0x7fffffffcc90, sol=...)
at /home/joe/bench/git/ethminer/libpoolprotocols/PoolManager.cpp:93
#14 0x00000000004d1e96 in std::_Function_handler<void(const dev::eth::Solution&), dev::eth::PoolManager::PoolManager(dev::eth::PoolClient
, dev::eth::Farm&, const dev::eth::MinerType&)::<lambda(dev::eth::Solution)> >::_M_invoke(const std::_Any_data &, const dev::eth::Solution &) (__functor=..., __args#0=...)
at /usr/include/c++/7.3.0/bits/std_function.h:316
#15 0x000000000051a226 in dev::eth::CLMiner::workLoop (this=0x7fffdc0080d0)
at /home/joe/bench/git/ethminer/libethash-cl/CLMiner.cpp:366
#16 0x0000000000509fa9 in dev::Worker::<lambda()>::operator()(void) const (
__closure=0x7fffdc008708)
#17 0x00007ffff76f0def in execute_native_thread_routine ()
from /lib64/libstdc++.so.6
#18 0x00007ffff79be62e in start_thread () from /lib64/libpthread.so.0
#19 0x00007ffff6e0fdef in clone () from /lib64/libc.so.6

joequant added a commit to joequant/ethminer that referenced this issue Mar 27, 2018
This patch changes the socket pointers to shared ptrs which will should
not be released if there is a call to async_write during a delete.
This is a fix for ethereum-mining#929 ethereum-mining#892 ethereum-mining#890 and ethereum-mining#887
@AndreaLanfranchi
Copy link
Collaborator

Please report on latest.
Thank you.

@AndreaLanfranchi
Copy link
Collaborator

Being addressed in #1135

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants