crypto-chassis / ccapi

A header-only C++ library for interacting with crypto exchanges. Bindings for Python, Java, C#, Go, and Javascript are provided.
https://discord.gg/b5EKcp9s8T
MIT License
550 stars 190 forks source link

random crash from ccapi_session #471

Open grownalchemist opened 1 month ago

grownalchemist commented 1 month ago

Describe the bug I'm getting a strange, intermittent/random crash with this very simple code which runs for a few hours then crashes. Note I am building using CCAPI_USE_SINGLE_THREAD (not sure if this matters).

The crash:

Thread 6 "main" received signal SIGSEGV, Segmentation fault.                                                                                                                                                                                                                                   [29/1828]
[Switching to Thread 0x7ffec2ab9000 (LWP 1736282)]                                                          
0x0000555555c8b0dd in SSL_connect (ssl=0x7ffe00000000) at external/openssl/src/ssl/ssl_lib.cc:882           
882     external/openssl/src/ssl/ssl_lib.cc: No such file or directory.                                     
(gdb) bt                                                                                                    
#0  0x0000555555c8b0dd in SSL_connect (ssl=0x7ffe00000000) at external/openssl/src/ssl/ssl_lib.cc:882       
#1  0x0000555555c76217 in boost::asio::ssl::detail::engine::do_connect (this=0x7ffe90d39e80)                
    at external/boost/boost/asio/ssl/detail/impl/engine.ipp:353                                             
#2  0x0000555555c75f78 in boost::asio::ssl::detail::engine::perform (this=0x7ffe90d39e80,                   
    op=(int (boost::asio::ssl::detail::engine::*)(boost::asio::ssl::detail::engine * const, void *, std::size_t)) 0x555555c761f0 <boost::asio::ssl::detail::engine::do_connect(void*, unsigned long)>, data=0x0, 
    length=0, ec=..., bytes_transferred=0x0) at external/boost/boost/asio/ssl/detail/impl/engine.ipp:280    
#3  0x0000555555c75a8c in boost::asio::ssl::detail::engine::handshake (this=0x7ffe90d39e80,                 
    type=boost::asio::ssl::stream_base::client, ec=...)                                                     
    at external/boost/boost/asio/ssl/detail/impl/engine.ipp:180                                             
#4  0x00005555556b74df in boost::asio::ssl::detail::handshake_op::operator() (this=0x7ffec2a8fe50,          
    eng=..., ec=..., bytes_transferred=@0x7ffec2a8fe78: 0)                                                  
    at external/boost/boost/asio/ssl/detail/handshake_op.hpp:47                                             
#5  0x00005555558947c3 in boost::asio::ssl::detail::io_op<boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>, boost::asio::ssl::detail::handshake_op, boost::beast::detail::bind_front_wrapper<void (ccapi::Service::*)(std::shared_ptr
<ccapi::WsConnection>, boost::system::error_code), std::shared_ptr<ccapi::Service>, std::shared_ptr<ccapi::WsConnection> > >::operator() (this=0x7ffec2a8fe38, ec=..., bytes_transferred=171, start=0)                                                                                                
    at external/boost/boost/asio/ssl/detail/io.hpp:154                                                      
#6  0x0000555555931189 in boost::beast::async_base<boost::asio::ssl::detail::io_op<boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>, boost::asio::ssl::detail::handshake_op, boost::beast::detail::bind_front_wrapper<void (ccapi::Se
rvice::*)(std::shared_ptr<ccapi::WsConnection>, boost::system::error_code), std::shared_ptr<ccapi::Service>, std::shared_ptr<ccapi::WsConnection> > >, boost::asio::any_io_executor, std::allocator<void> >::complete_now<boost::system::error_code&, unsigned long&> (this=0x7ffec2a8fe30) at external/
boost/boost/beast/core/async_base.hpp:428                                                                   
#7  0x0000555555922c10 in boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>::ops::transfer_op<true, boost::asio::mutable_buffers_1, boost::asio::ssl::detail::io_op<boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_
io_executor, boost::beast::unlimited_rate_policy>, boost::asio::ssl::detail::handshake_op, boost::beast::detail::bind_front_wrapper<void (ccapi::Service::*)(std::shared_ptr<ccapi::WsConnection>, boost::system::error_code), std::shared_ptr<ccapi::Service>, std::shared_ptr<ccapi::WsConnection> > >
 >::operator() (this=0x7ffec2a8fe30, ec=...,                                                                
    bytes_transferred=171) at external/boost/boost/beast/core/impl/basic_stream.hpp:429                     
#8  0x00005555559cabe3 in boost::asio::detail::binder2<boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>::ops::transfer_op<true, boost::asio::mutable_buffers_1, boost::asio::ssl::detail::io_op<boost::beast::basic_stream<boost::asi
o::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>, boost::asio::ssl::detail::handshake_op, boost::beast::detail::bind_front_wrapper<void (ccapi::Service::*)(std::shared_ptr<ccapi::WsConnection>, boost::system::error_code), std::shared_ptr<ccapi::Service>, std::shared
_ptr<ccapi::WsConnection> > > >, boost::system::error_code, unsigned long>::operator() (this=0x7ffec2a8fe30)                                       
    at external/boost/boost/asio/detail/bind_handler.hpp:289                                                
#9  0x00005555559cab8a in boost::asio::asio_handler_invoke<boost::asio::detail::binder2<boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>::ops::transfer_op<true, boost::asio::mutable_buffers_1, boost::asio::ssl::detail::io_op<boos
t::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>, boost::asio::ssl::detail::handshake_op, boost::beast::detail::bind_front_wrapper<void (ccapi::Service::*)(std::shared_ptr<ccapi::WsConnection>, boost::system::error_code), std::shared
_ptr<ccapi::Service>, std::shared_ptr<ccapi::WsConnection> > > >, boost::system::error_code, unsigned long> > (function=...)                       
    at external/boost/boost/asio/handler_invoke_hook.hpp:88                                                 
#10 0x00005555559bc0e0 in boost::beast::detail::asio_handler_invoke<boost::asio::detail::binder2<boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>::ops::transfer_op<true, boost::asio::mutable_buffers_1, boost::asio::ssl::detail::i
o_op<boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>, boost::asio::ssl::detail::handshake_op, boost::beast::detail::bind_front_wrapper<void (ccapi::Service::*)(std::shared_ptr<ccapi::WsConnection>, boost::system::error_code), st
d::shared_ptr<ccapi::Service>, std::shared_ptr<ccapi::WsConnection> > > >, boost::system::error_code, unsigned long>&> (f=..., op=0x7ffec2a8fe80)                                                                                                                                                     
    at external/boost/boost/beast/core/detail/bind_handler.hpp:287                                          
#11 0x00005555559ad589 in boost_asio_handler_invoke_helpers::invoke<boost::asio::detail::binder2<boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>::ops::transfer_op<true, boost::asio::mutable_buffers_1, boost::asio::ssl::detail::i
o_op<boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>, boost::asio::ssl::detail::handshake_op, boost::beast::detail::bind_front_wrapper<void (ccapi::Service::*)(std::shared_ptr<ccapi::WsConnection>, boost::system::error_code), st
d::shared_ptr<ccapi::Service>, std::shared_ptr<ccapi::WsConnection> > > >, boost::system::error_code, unsigned long>, boost::beast::detail::bind_front_wrapper<void (ccapi::Service::*)(std::shared_ptr<ccapi::WsConnection>, boost::system::error_code), std::shared_ptr<ccapi::Service>, std::shared_p
tr<ccapi::WsConnection> > > (function=..., context=...)                                                     
    at external/boost/boost/asio/detail/handler_invoke_helpers.hpp:54                                       
#12 0x000055555599faf0 in boost::asio::ssl::detail::asio_handler_invoke<boost::asio::detail::binder2<boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>::ops::transfer_op<true, boost::asio::mutable_buffers_1, boost::asio::ssl::detai
l::io_op<boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>, boost::asio::ssl::detail::handshake_op, boost::beast::detail::bind_front_wrapper<void (ccapi::Service::*)(std::shared_ptr<ccapi::WsConnection>, boost::system::error_code)
, std::shared_ptr<ccapi::Service>, std::shared_ptr<ccapi::WsConnection> > > >, boost::system::error_code, unsigned long>, boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>, boost::asio::ssl::detail::handshake_op, boost::beast::det
ail::bind_front_wrapper<void (ccapi::Service::*)(std::shared_ptr<ccapi::WsConnection>, boost::system::error_code), std::shared_ptr<ccapi::Service>, std::shared_ptr<ccapi::WsConnection> > > (                                                                                                        
    function=..., this_handler=0x7ffec2a8fe38) at external/boost/boost/asio/ssl/detail/io.hpp:374           
#13 0x0000555555994427 in boost::beast::asio_handler_invoke<boost::asio::ssl::detail::io_op<boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>, boost::asio::ssl::detail::handshake_op, boost::beast::detail::bind_front_wrapper<void (
ccapi::Service::*)(std::shared_ptr<ccapi::WsConnection>, boost::system::error_code), std::shared_ptr<ccapi::Service>, std::shared_ptr<ccapi::WsConnection> > >, boost::asio::any_io_executor, std::allocator<void>, boost::asio::detail::binder2<boost::beast::basic_stream<boost::asio::ip::tcp, boost:
:asio::any_io_executor, boost::beast::unlimited_rate_policy>::ops::transfer_op<true, boost::asio::mutable_buffers_1, boost::asio::ssl::detail::io_op<boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>, boost::asio::ssl::detail::hand
shake_op, boost::beast::detail::bind_front_wrapper<void (ccapi::Service::*)(std::shared_ptr<ccapi::WsConnection>, boost::system::error_code), std::shared_ptr<ccapi::Service>, std::shared_ptr<ccapi::WsConnection> > > >, boost::system::error_code, unsigned long>&> (f=..., p=0x7ffec2a8fe30)      
    at external/boost/boost/beast/core/impl/async_base.hpp:64                                               
#14 0x000055555598a13e in boost_asio_handler_invoke_helpers::invoke<boost::asio::detail::binder2<boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>::ops::transfer_op<true, boost::asio::mutable_buffers_1, boost::asio::ssl::detail::i
o_op<boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>, boost::asio::ssl::detail::handshake_op, boost::beast::detail::bind_front_wrapper<void (ccapi::Service::*)(std::shared_ptr<ccapi::WsConnection>, boost::system::error_code), st
d::shared_ptr<ccapi::Service>, std::shared_ptr<ccapi::WsConnection> > > >, boost::system::error_code, unsigned long>, boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>::ops::transfer_op<true, boost::asio::mutable_buffers_1, boost:
:asio::ssl::detail::io_op<boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>, boost::asio::ssl::detail::handshake_op, boost::beast::detail::bind_front_wrapper<void (ccapi::Service::*)(std::shared_ptr<ccapi::WsConnection>, boost::sy
stem::error_code), std::shared_ptr<ccapi::Service>, std::shared_ptr<ccapi::WsConnection> > > > > (                                                 
    function=..., context=...) at external/boost/boost/asio/detail/handler_invoke_helpers.hpp:54            
#15 0x00005555559ea314 in boost::asio::detail::asio_handler_invoke<boost::asio::detail::binder2<boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>::ops::transfer_op<true, boost::asio::mutable_buffers_1, boost::asio::ssl::detail::io
_op<boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>, boost::asio::ssl::detail::handshake_op, boost::beast::detail::bind_front_wrapper<void (ccapi::Service::*)(std::shared_ptr<c--Type <RET> for more, q to quit, c to continue with
out paging--                                                                                                
capi::WsConnection>, boost::system::error_code), std::shared_ptr<ccapi::Service>, std::shared_ptr<ccapi::WsConnection> > > >, boost::system::error_code, unsigned long>, boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>::ops::trans
fer_op<true, boost::asio::mutable_buffers_1, boost::asio::ssl::detail::io_op<boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>, boost::asio::ssl::detail::handshake_op, boost::beast::detail::bind_front_wrapper<void (ccapi::Service:
:*)(std::shared_ptr<ccapi::WsConnection>, boost::system::error_code), std::shared_ptr<ccapi::Service>, std::shared_ptr<ccapi::WsConnection> > > >, boost::system::error_code, unsigned long> (function=..., this_handler=0x7ffec2a8fe30)                                                              
    at external/boost/boost/asio/detail/bind_handler.hpp:344                                                
#16 0x00005555559dad6e in boost_asio_handler_invoke_helpers::invoke<boost::asio::detail::binder2<boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>::ops::transfer_op<true, boost::asio::mutable_buffers_1, boost::asio::ssl::detail::i
o_op<boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>, boost::asio::ssl::detail::handshake_op, boost::beast::detail::bind_front_wrapper<void (ccapi::Service::*)(std::shared_ptr<ccapi::WsConnection>, boost::system::error_code), st
d::shared_ptr<ccapi::Service>, std::shared_ptr<ccapi::WsConnection> > > >, boost::system::error_code, unsigned long>, boost::asio::detail::binder2<boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>::ops::transfer_op<true, boost::as
io::mutable_buffers_1, boost::asio::ssl::detail::io_op<boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>, boost::asio::ssl::detail::handshake_op, boost::beast::detail::bind_front_wrapper<void (ccapi::Service::*)(std::shared_ptr<cc
api::WsConnection>, boost::system::error_code), std::shared_ptr<ccapi::Service>, std::shared_ptr<ccapi::WsConnection> > > >, boost::system::error_code, unsigned long> > (function=..., context=...)                                                                                                  
    at external/boost/boost/asio/detail/handler_invoke_helpers.hpp:54                                       
#17 0x00005555559cadc5 in boost::asio::detail::executor_function::complete<boost::asio::detail::binder2<boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>::ops::transfer_op<true, boost::asio::mutable_buffers_1, boost::asio::ssl::de
tail::io_op<boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>, boost::asio::ssl::detail::handshake_op, boost::beast::detail::bind_front_wrapper<void (ccapi::Service::*)(std::shared_ptr<ccapi::WsConnection>, boost::system::error_co
de), std::shared_ptr<ccapi::Service>, std::shared_ptr<ccapi::WsConnection> > > >, boost::system::error_code, unsigned long>, std::allocator<void> > (                                                                                                                                                 
    base=0x7ffe60234ca0, call=true) at external/boost/boost/asio/detail/executor_function.hpp:116           
#18 0x00005555556b477d in boost::asio::detail::executor_function::operator() (this=0x7ffec2a900b0)          
    at external/boost/boost/asio/detail/executor_function.hpp:64                                            
#19 0x0000555555917788 in boost::asio::asio_handler_invoke<boost::asio::detail::executor_function> (        
    function=...) at external/boost/boost/asio/handler_invoke_hook.hpp:88                                                                           
#20 0x0000555555900ea8 in boost_asio_handler_invoke_helpers::invoke<boost::asio::detail::executor_function, boost::asio::detail::executor_function> (function=..., context=...)                                                                                                                         
    at external/boost/boost/asio/detail/handler_invoke_helpers.hpp:54                                                                               
#21 0x0000555555936e52 in boost::asio::io_context::basic_executor_type<std::allocator<void>, 4ul>::execute<boost::asio::detail::executor_function> (this=0x7ffec2a903d8, f=...)                                                                                                                         
    at external/boost/boost/asio/impl/io_context.hpp:294                                                                                            
#22 0x000055555592ab21 in boost_asio_execution_execute_fn::impl::operator()<boost::asio::io_context::basic_executor_type<std::allocator<void>, 4ul> const&, boost::asio::detail::executor_function> (                                                                                                   
    this=0x555555f17a2a <boost_asio_execution_execute_fn::static_instance<boost_asio_execution_execute_fn::impl>::instance>, t=..., f=...) at external/boost/boost/asio/execution/execute.hpp:213                                                                                                       
#23 0x00005555559175c8 in boost::asio::execution::detail::any_executor_base::execute_ex<boost::asio::io_context::basic_executor_type<std::allocator<void>, 4ul> > (ex=..., f=...)                                                                                                                       
    at external/boost/boost/asio/execution/any_executor.hpp:1011                                                                                    
#24 0x000055555599fc0a in boost::asio::execution::detail::any_executor_base::execute<boost::asio::detail::binder2<boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>::ops::transfer_op<true, boost::asio::mutable_buffers_1, boost::asi
o::ssl::detail::io_op<boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>, boost::asio::ssl::detail::handshake_op, boost::beast::detail::bind_front_wrapper<void (ccapi::Service::*)(std::shared_ptr<ccapi::WsConnection>, boost::system
::error_code), std::shared_ptr<ccapi::Service>, std::shared_ptr<ccapi::WsConnection> > > >, boost::system::error_code, unsigned long> > (this=0x7ffec2a903d8,                                                                                                                                           
    f=...) at external/boost/boost/asio/execution/any_executor.hpp:788                                                                              
#25 0x0000555555994455 in boost_asio_execution_execute_fn::impl::operator()<boost::asio::any_io_executor&, boost::asio::detail::binder2<boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>::ops::transfer_op<true, boost::asio::mutable
_buffers_1, boost::asio::ssl::detail::io_op<boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>, boost::asio::ssl::detail::handshake_op, boost::beast::detail::bind_front_wrapper<void (ccapi::Service::*)(std::shared_ptr<ccapi::WsConn
ection>, boost::system::error_code), std::shared_ptr<ccapi::Service>, std::shared_ptr<ccapi::WsConnection> > > >, boost::system::error_code, unsigned long> > (                                                                                                                                         
    this=0x555555f17a2a <boost_asio_execution_execute_fn::static_instance<boost_asio_execution_execute_fn::impl>::instance>, t=..., f=...) at external/boost/boost/asio/execution/execute.hpp:213                                                                                                       
#26 0x000055555598a177 in boost::asio::detail::handler_work_base<boost::asio::any_io_executor, boost::asio::any_io_executor, boost::asio::io_context, boost::asio::executor, void>::dispatch<boost::asio::detail::binder2<boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor,
 boost::beast::unlimited_rate_policy>::ops::transfer_op<true, boost::asio::mutable_buffers_1, boost::asio::ssl::detail::io_op<boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>, boost::asio::ssl::detail::handshake_op, boost::beast:
:detail::bind_front_wrapper<void (ccapi::Service::*)(std::shared_ptr<ccapi::WsConnection>, boost::system::error_code), std::shared_ptr<ccapi::Service>, std::shared_ptr<ccapi::WsConnection> > > >, boost::system::error_code, unsigned long>, boost::beast::basic_stream<boost::asio::ip::tcp, boost::a
sio::any_io_executor, boost::beast::unlimited_rate_policy>::ops::transfer_op<true, boost::asio::mutable_buffers_1, boost::asio::ssl::detail::io_op<boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>, boost::asio::ssl::detail::handsh
ake_op, boost::beast::detail::bind_front_wrapper<void (ccapi::Service::*)(std::shared_ptr<ccapi::WsConnection>, boost::system::error_code), std::shared_ptr<ccapi::Service>, std::shared_ptr<ccapi::WsConnection> > > > > (                                                                             
    this=0x7ffec2a903d8, function=...) at external/boost/boost/asio/detail/handler_work.hpp:452                                                     
#27 0x0000555555980374 in boost::asio::detail::handler_work<boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>::ops::transfer_op<true, boost::asio::mutable_buffers_1, boost::asio::ssl::detail::io_op<boost::beast::basic_stream<boost
::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>, boost::asio::ssl::detail::handshake_op, boost::beast::detail::bind_front_wrapper<void (ccapi::Service::*)(std::shared_ptr<ccapi::WsConnection>, boost::system::error_code), std::shared_ptr<ccapi::Service>, std::s
hared_ptr<ccapi::WsConnection> > > >, boost::asio::any_io_executor, void>::complete<boost::asio::detail::binder2<boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>::ops::transfer_op<true, boost::asio::mutable_buffers_1, boost::asio
::ssl::detail::io_op<boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>, boost::asio::ssl::detail::handshake_op, boost::beast::detail::bind_front_wrapper<void (ccapi::Service::*)(std::shared_ptr<ccapi::WsConnection>, boost::system:
:error_code), std::shared_ptr<ccapi::Service>, std::shared_ptr<ccapi::WsConnection> > > >, boost::system::error_code, unsigned long> > (this=0x7ffec2a903a0, function=..., handler=...)                                                                                                                 
    at external/boost/boost/asio/detail/handler_work.hpp:492                                                                                        
#28 0x00005555559759be in boost::asio::detail::reactive_socket_recv_op<boost::beast::buffers_prefix_view<boost::asio::mutable_buffers_1>, boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>::ops::transfer_op<true, boost::asio::mutab
le_buffers_1, boost::asio::ssl::detail::io_op<boost::beast::basic_stream<boost::asio::ip::tcp, boost::asio::any_io_executor, boost::beast::unlimited_rate_policy>, boost::asio::ssl::detail::handshake_op, boost::beast::detail::bind_front_wrapper<void (ccapi::Service::*)(std::shared_ptr<ccapi::WsCo
nnection>, boost::system::error_code), std::shared_ptr<ccapi::Service>, std::shared_ptr<ccapi::WsConnection> > > >, boost::asio::any_io_executor>::do_complete (                                                                                                                                        
    owner=0x55555a440380, base=0x7ffe92e0aff0)                            
    at external/boost/boost/asio/detail/reactive_socket_recv_op.hpp:152                                                                             
#29 0x0000555555e33d98 in boost::asio::detail::scheduler_operation::complete (this=0x7ffe92e0aff0,                                                  
    owner=0x55555a440380, ec=..., bytes_transferred=0)                    
    at external/boost/boost/asio/detail/scheduler_operation.hpp:40                                                                                  
#30 0x0000555555e2610a in boost::asio::detail::scheduler::do_run_one (this=0x55555a440380, lock=...,                                                
    this_thread=..., ec=...) at external/boost/boost/asio/detail/impl/scheduler.ipp:493                                                             
--Type <RET> for more, q to quit, c to continue without paging--                                                                                    
#31 0x0000555555e2510a in boost::asio::detail::scheduler::run (this=0x55555a440380, ec=...)                                                         
    at external/boost/boost/asio/detail/impl/scheduler.ipp:210                                                                                      
#32 0x0000555555e1cc79 in boost::asio::io_context::run (this=0x555559335f20)                                                                        
    at external/boost/boost/asio/impl/io_context.ipp:64                                                                                             
#33 0x00005555556d4e6d in ccapi::ServiceContext::start (this=0x55555a051a60)                                                                        
    at src/third_party/ccapi/include/ccapi_cpp/service/ccapi_service_context.h:123                                                                  
#34 0x0000555555775d6c in ccapi::Session::start()::{lambda()#1}::operator()() const (                                                               
    __closure=0x5555593b2138) at src/third_party/ccapi/include/ccapi_cpp/ccapi_session.h:317                                                        
#35 0x0000555555c55671 in std::__invoke_impl<void, ccapi::Session::start()::{lambda()#1}>(std::__invoke_other, ccapi::Session::start()::{lambda()#1}&&) (__f=...) at /usr/include/c++/12/bits/invoke.h:61                                                                                               
#36 0x0000555555c553fc in std::__invoke<ccapi::Session::start()::{lambda()#1}>(ccapi::Session::start()::{lambda()#1}&&) (__fn=...) at /usr/include/c++/12/bits/invoke.h:96                                                                                                                              
#37 0x0000555555c549ea in std::thread::_Invoker<std::tuple<ccapi::Session::start()::{lambda()#1}> >::_M_invoke<0ul>(std::_Index_tuple<0ul>) (this=0x5555593b2138) at /usr/include/c++/12/bits/std_thread.h:279                                                                                          
#38 0x0000555555c5364a in std::thread::_Invoker<std::tuple<ccapi::Session::start()::{lambda()#1}> >::operator()() (this=0x5555593b2138) at /usr/include/c++/12/bits/std_thread.h:286                                                                                                                    
#39 0x0000555555c50ca0 in std::thread::_State_impl<std::thread::_Invoker<std::tuple<ccapi::Session::start()::{lambda()#1}> > >::_M_run() (this=0x5555593b2130) at /usr/include/c++/12/bits/std_thread.h:231                                                                                             
#40 0x00007ffef80dc253 in ?? () from /lib/x86_64-linux-gnu/libstdc++.so.6                                                                           
#41 0x00007ffef7c94ac3 in start_thread (arg=<optimized out>) at ./nptl/pthread_create.c:442                                                         
#42 0x00007ffef7d26850 in clone3 () at ../sysdeps/unix/sysv/linux/x86_64/clone3.S:81                                                                

The code:

class MyEventHandler : public EventHandler {
 public:
  MarketDataEventHandler() {}

  bool processEvent(const Event& event, Session* session) override {
    std::cout << event.toStringPretty(2, 2) << std::endl;
    return true;
  }
};

void main() {
  Subscription binance_depth_subscription(
      "binance", "BTCUSDT", "MARKET_DEPTH",
      "",
      "abc");
  Subscription gateio_depth_subscription("gateio","BTC_USDT", "MARKET_DEPTH",
                                         "",
                                         "def");
  SessionOptions sessionOptions;
  SessionConfigs sessionConfigs;
  MyEventHandler handler;
  Session session(sessionOptions, sessionConfigs, &handler);
  session.subscribe({binance_depth_subscription, gateio_depth_subscription});
  std::this_thread::sleep_for(std::chrono::hours(10));
  session.stop();
  return EXIT_SUCCESS;
}

To Reproduce Steps to reproduce the behavior:

  1. Run the above code in a main.cc with CCAPI_USE_SINGLE_THREAD for a few hours.

Expected behavior Code works without crashing intermittently.

Screenshots N/A

Additional context Running on Linux Ubuntu 22.04 built using Bazel and gcc 11.4.0. Backtrace from gdb.

grownalchemist commented 1 month ago

Interesting, does seem to be caused by CCAPI_USE_SINGLE_THREAD. Problem goes away when removing CCAPI_USE_SINGLE_THREAD.