microsoft / cpprestsdk

The C++ REST SDK is a Microsoft project for cloud-based client-server communication in native code using a modern asynchronous C++ API design. This project aims to help C++ developers connect to and interact with services.
Other
8k stars 1.65k forks source link

Segfault : Valgrind show this issue #1430

Open tumusudheer opened 4 years ago

tumusudheer commented 4 years ago

/build/cpprest-2i1wUL/cpprest-2.10.2/Release/src/websockets/client/ws_client_wspp.cpp:315: web::websockets::client::details::wspp_callback_client::connect_impl()::<lambda(websocketpp::connection_hdl)> [with WebsocketConfigType = websocketpp::config::asio_tls_client; websocketpp::connection_hdl = std::weak_ptr<void>]: Assertionm_state != CLOSED' failed.`

E 2020-05-23T20:12:03.961556993Z ==1== Process terminating with default action of signal 6 (SIGABRT): dumping core

E 2020-05-23T20:12:03.961559880Z ==1== at 0x8871E97: raise (raise.c:51)

E 2020-05-23T20:12:03.961578657Z ==1== by 0x8873800: abort (abort.c:79)

E 2020-05-23T20:12:03.961593788Z ==1== by 0x8863399: __assert_fail_base (assert.c:92)

E 2020-05-23T20:12:03.961598275Z ==1== by 0x8863411: __assert_fail (assert.c:101)

E 2020-05-23T20:12:03.961601046Z ==1== by 0x4FE7C0D: std::_Function_handler<void (std::weak_ptr), pplx::task web::websockets::client::details::wspp_callback_client::connect_impl()::{lambda(std::weak_ptr)#4}>::_M_invoke(std::_Any_data const&, std::weak_ptr&&) (in /usr/lib/x86_64-linux-gnu/libcpprest.so.2.10)

E 2020-05-23T20:12:03.961604801Z ==1== by 0x4FF2866: websocketpp::connection::handle_terminate(websocketpp::connection::terminate_status, std::error_code const&) (in /usr/lib/x86_64-linux-gnu/libcpprest.so.2.10)

E 2020-05-23T20:12:03.961625295Z ==1== by 0x500497C: websocketpp::transport::asio::connection::handle_async_shutdown(std::shared_ptr<boost::asio::basic_waitable_timer<std::chrono::_V2::steady_clock, boost::asio::wait_traits, boost::asio::waitable_timer_service<std::chrono::_V2::steady_clock, boost::asio::wait_traits > > >, std::function<void (std::error_code const&)>, boost::system::error_code const&) (in /usr/lib/x86_64-linux-gnu/libcpprest.so.2.10)

E 2020-05-23T20:12:03.961637505Z ==1== by 0x50052E9: void std::invoke_impl<void, void (websocketpp::transport::asio::connection::*&)(std::shared_ptr<boost::asio::basic_waitable_timer<std::chrono::_V2::steady_clock, boost::asio::wait_traits, boost::asio::waitable_timer_service<std::chrono::_V2::steady_clock, boost::asio::wait_traits > > >, std::function<void (std::error_code const&)>, boost::system::error_code const&), std::shared_ptr<websocketpp::transport::asio::connection >&, std::shared_ptr<boost::asio::basic_waitable_timer<std::chrono::_V2::steady_clock, boost::asio::wait_traits, boost::asio::waitable_timer_service<std::chrono::_V2::steady_clock, boost::asio::wait_traits > > >&, std::function<void (std::error_code const&)>&, boost::system::error_code const&>(std::invoke_memfun_deref, void (websocketpp::transport::asio::connection::*&)(std::shared_ptr<boost::asio::basic_waitable_timer<std::chrono::_V2::steady_clock, boost::asio::wait_traits, boost::asio::waitable_timer_service<std::chrono::_V2::steady_clock, boost::asio::wait_traits > > >, std::function<void (std::error_code const&)>, boost::system::error_code const&), std::shared_ptr<websocketpp::transport::asio::connection >&, std::shared_ptr<boost::asio::basic_waitable_timer<std::chrono::_V2::steady_clock, boost::asio::wait_traits, boost::asio::waitable_timer_service<std::chrono::_V2::steady_clock, boost::asio::wait_traits > > >&, std::function<void (std::error_code const&)>&, boost::system::error_code const&) (in /usr/lib/x86_64-linux-gnu/libcpprest.so.2.10)

E 2020-05-23T20:12:03.961658611Z ==1== by 0x500538C: std::_Function_handler<void (boost::system::error_code const&), std::_Bind<void (websocketpp::transport::asio::connection::*(std::shared_ptr<websocketpp::transport::asio::connection >, std::shared_ptr<boost::asio::basic_waitable_timer<std::chrono::_V2::steady_clock, boost::asio::wait_traits, boost::asio::waitable_timer_service<std::chrono::_V2::steady_clock, boost::asio::wait_traits > > >, std::function<void (std::error_code const&)>, std::_Placeholder<1>))(std::shared_ptr<boost::asio::basic_waitable_timer<std::chrono::_V2::steady_clock, boost::asio::wait_traits, boost::asio::waitable_timer_service<std::chrono::_V2::steady_clock, boost::asio::wait_traits > > >, std::function<void (std::error_code const&)>, boost::system::error_code const&)> >::_M_invoke(std::_Any_data const&, boost::system::error_code const&) (in /usr/lib/x86_64-linux-gnu/libcpprest.so.2.10)

E 2020-05-23T20:12:03.961674729Z ==1== by 0x4FFC479: void boost::asio::detail::strand_service::dispatch<boost::asio::detail::binder1<std::function<void (boost::system::error_code const&)>, boost::system::error_code> >(boost::asio::detail::strand_service::strand_impl*&, boost::asio::detail::binder1<std::function<void (boost::system::error_code const&)>, boost::system::error_code>&) (in /usr/lib/x86_64-linux-gnu/libcpprest.so.2.10)

E 2020-05-23T20:12:03.961681350Z ==1== by 0x4FFC70F: void boost::asio::detail::wrapped_handler<boost::asio::io_service::strand, std::function<void (boost::system::error_code const&)>, boost::asio::detail::is_continuation_if_running>::operator()(boost::system::error_code const&) (in /usr/lib/x86_64-linux-gnu/libcpprest.so.2.10)

E 2020-05-23T20:12:03.961696478Z ==1== by 0x4FFCA82: boost::asio::ssl::detail::io_op<boost::asio::basic_stream_socket<boost::asio::ip::tcp, boost::asio::stream_socket_service >, boost::asio::ssl::detail::shutdown_op, boost::asio::detail::wrapped_handler<boost::asio::io_service::strand, std::function<void (boost::system::error_code const&)>, boost::asio::detail::is_continuation_if_running> >::operator()(boost::system::error_code, unsigned long, int) (in /usr/lib/x86_64-linux-gnu/libcpprest.so.2.10)

E 2020-05-23T20:12:09.426462564Z --1-- Discarding syms at 0x10de3350-0x10de9d7f in /lib/x86_64-linux-gnu/libnss_files-2.27.so due to munmap()

E 2020-05-23T20:12:09.429180725Z --1-- Discarding syms at 0x2be31f80-0x2be3579b in /lib/x86_64-linux-gnu/libnss_dns-2.27.so due to munmap()

E 2020-05-23T20:12:09.430214088Z --1-- Discarding syms at 0x2c03b830-0x2c04b152 in /lib/x86_64-linux-gnu/libresolv-2.27.so due to munmap()

tumusudheer commented 4 years ago

We got this issue in production while running normally (without) production.

/build/cpprest-2i1wUL/cpprest-2.10.2/Release/src/websockets/client/ws_client_wspp.cpp:315: web::websockets::client::details::wspp_callback_client::connect_impl()::<lambda(websocketpp::connection_hdl)> [with WebsocketConfigType = websocketpp::config::asio_tls_client; websocketpp::connection_hdl = std::weak_ptr<void>]: Assertionm_state != CLOSED' failed.`

Any suggestions on how to fix this ?

This is the method we use to close socket

int Suki_ASR_Nvoq::Disconnect(void)
{
    try
    {
        printf("Closing websocket connection \n");fflush(stdout);
        nvoq_streamer.close().then([](){  std::cout << " Successfully closed websocket connection. \n"; });
    }
    catch(const websocket_exception& e)
    {
        std::cout << " Warning Failed while closing web socket"<< e.what() << "\n";
        return -1;
    }
    return 0;
}

Any Exception we can add to catch the error here so that we can void programing ending abruptly because of segfault ?