Skip to content
This repository was archived by the owner on Jun 1, 2026. It is now read-only.
This repository was archived by the owner on Jun 1, 2026. It is now read-only.

pplx::task ContinuationTaskHandle exception causing crash #1763

Description

@przcub

Hi,
In our production code we are getting crash and looking for some support with finding root cause.
Any advice is more than welcome
libcpprest in version 2.10.

#0  0x0000007f796b9c9c in raise () from /.../lib/libpthread.so.0
No symbol table info available.
#1  0x0000005589813fdc in pplx::details::_ExceptionHolder::~_ExceptionHolder (this=<optimized out>, this=<optimized out>) at /.../usr/include/pplx/pplxtasks.h:952
No locals.
#2  0x00000055897e2d78 in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release (this=0x7f683b9c90) at /.../usr/include/c++/9.3.0/bits/shared_ptr_base.h:148
No locals.
#3  std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release (this=0x7f683b9c90) at /.../usr/include/c++/9.3.0/bits/shared_ptr_base.h:148
No locals.
#4  std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count (this=<optimized out>, this=<optimized out>) at /.../usr/include/c++/9.3.0/bits/shared_ptr_base.h:730
No locals.
#5  std::__shared_ptr<pplx::details::_ExceptionHolder, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr (this=<optimized out>, this=<optimized out>) at /.../usr/include/c++/9.3.0/bits/shared_ptr_base.h:1169
No locals.
#6  std::shared_ptr<pplx::details::_ExceptionHolder>::~shared_ptr (this=<optimized out>, this=<optimized out>) at /.../usr/include/c++/9.3.0/bits/shared_ptr.h:103
No locals.
#7  pplx::details::_Task_impl_base::~_Task_impl_base (this=<optimized out>, this=<optimized out>) at /.../usr/include/pplx/pplxtasks.h:1718
No locals.
#8  pplx::details::_Task_impl<unsigned char>::~_Task_impl (this=<optimized out>, this=<optimized out>) at /.../usr/include/pplx/pplxtasks.h:2425
No locals.
#9  __gnu_cxx::new_allocator<pplx::details::_Task_impl<unsigned char> >::destroy<pplx::details::_Task_impl<unsigned char> > (this=<optimized out>, __p=<optimized out>)
    at /.../usr/include/c++/9.3.0/ext/new_allocator.h:153
No locals.
#10 std::allocator_traits<std::allocator<pplx::details::_Task_impl<unsigned char> > >::destroy<pplx::details::_Task_impl<unsigned char> > (__a=..., __p=<optimized out>)
    at /.../usr/include/c++/9.3.0/bits/alloc_traits.h:497
No locals.
#11 std::_Sp_counted_ptr_inplace<pplx::details::_Task_impl<unsigned char>, std::allocator<pplx::details::_Task_impl<unsigned char> >, (__gnu_cxx::_Lock_policy)2>::_M_dispose (this=0x7f683c11e0)
    at /.../usr/include/c++/9.3.0/bits/shared_ptr_base.h:557
No locals.
#12 0x0000005589752524 in std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release (this=0x7f682afc80) at /.../usr/include/c++/9.3.0/bits/shared_ptr_base.h:155
No locals.
#13 std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_release (this=0x7f682afc80) at /.../usr/include/c++/9.3.0/bits/shared_ptr_base.h:148
No locals.
#14 std::__shared_count<(__gnu_cxx::_Lock_policy)2>::~__shared_count (this=<optimized out>, this=<optimized out>) at /.../usr/include/c++/9.3.0/bits/shared_ptr_base.h:730
No locals.
#15 std::__shared_ptr<pplx::details::_Task_impl<unsigned char>, (__gnu_cxx::_Lock_policy)2>::~__shared_ptr (this=<optimized out>, this=<optimized out>) at /.../usr/include/c++/9.3.0/bits/shared_ptr_base.h:1169
No locals.
#16 std::shared_ptr<pplx::details::_Task_impl<unsigned char> >::~shared_ptr (this=<optimized out>, this=<optimized out>) at /.../usr/include/c++/9.3.0/bits/shared_ptr.h:103
No locals.
#17 pplx::details::_PPLTaskHandle<unsigned char, pplx::task<web::http::http_response>::_ContinuationTaskHandle<web::http::http_response, void, CWebHTTPClient::doRequest(const string&, const string&, const string&, IHTTPClient::RequestCallback_t)::<lambda(const pplx::task<web::http::http_response>&)>, std::integral_constant<bool, true>, pplx::details::_TypeSelectorNoAsync>, pplx::details::_ContinuationTaskHandleBase>::~_PPLTaskHandle (this=<optimized out>, this=<optimized out>)
    at /.../usr/include/pplx/pplxtasks.h:1628
No locals.
#18 pplx::task<web::http::http_response>::_ContinuationTaskHandle<web::http::http_response, void, CWebHTTPClient::doRequest(const string&, const string&, const string&, IHTTPClient::RequestCallback_t)::<lambda(const pplx::task<web::http::http_response>&)>, std::integral_constant<bool, true>, pplx::details::_TypeSelectorNoAsync>::~_ContinuationTaskHandle (this=<optimized out>, this=<optimized out>) at /.../usr/include/pplx/pplxtasks.h:3927
No locals.
#19 pplx::task<web::http::http_response>::_ContinuationTaskHandle<web::http::http_response, void, CWebHTTPClient::doRequest(const string&, const string&, const string&, IHTTPClient::RequestCallback_t)::<lambda(const pplx::task<web::http::http_response>&)>, std::integral_constant<bool, true>, pplx::details::_TypeSelectorNoAsync>::~_ContinuationTaskHandle(void) (this=<optimized out>, this=<optimized out>) at /.../usr/include/pplx/pplxtasks.h:3927
No locals.
#20 0x0000007f7ad62954 in boost::asio::detail::completion_handler<boost::_bi::bind_t<void, void (*)(void*), boost::_bi::list1<boost::_bi::value<void*> > > >::do_complete(void*, boost::asio::detail::scheduler_operation*, boost::system::error_code const&, unsigned long)
    () from /.../usr/lib/libcpprest.so.2.10
No symbol table info available.
#21 0x0000007f7ace04d8 in ?? () from /.../usr/lib/libcpprest.so.2.10
No symbol table info available.
#22 0x0000007f7ad63738 in ?? () from /.../usr/lib/libcpprest.so.2.10
No symbol table info available.
#23 0x0000007f7acc940c in ?? () from /.../usr/lib/libcpprest.so.2.10
No symbol table info available.
#24 0x0000007f796ae4c8 in ?? () from /.../lib/libpthread.so.0
No symbol table info available.
#25 0x0000007f794298fc in ?? () from /.../lib/libc.so.6
No symbol table info available.

Piece of code

void CWebHTTPClient::doRequest( const std::string &url, const std::string &method, const std::string &payload,
                                IHTTPClient::RequestCallback_t callback )
{
    auto httpMethod = web::http::methods::GET;
    if( "POST" == method )
    {
        httpMethod = web::http::methods::POST;
    }
    web::http::client::http_client client( url, createConfig() );
    web::http::http_request request = std::move( createRequest( payload, method ) );
    client.request( request ).then( [url, callback]( const pplx::task< web::http::http_response > &responseTask )
    {
        auto responseTaskData = responseTask.get();
        auto code = responseTaskData.status_code();

        const auto ignoreContentType = true;
        responseTaskData.extract_string( ignoreContentType ).then( [code, url, callback] ( const pplx::task< utility::string_t > &bodyTask )
        {
            const auto body = utility::conversions::to_utf8string( bodyTask.get() );
            IHTTPClient::Response_t response;
            response.code = static_cast<HTTPCode> ( code );
            response.responseBody = body;

            callback( response );
        } );
    } );
}

web::http::http_request CWebHTTPClient::createRequest( const std::string &payload, const std::string &method ) const noexcept
{
    web::http::http_request request( method );
    request.headers().add( std::string( "Content-Type" ), std::string( "application/json" ) );

    if( web::http::methods::POST == method && !payload.empty() )
    {
        request.headers().add( std::string( "Content-Length" ), payload.size() );
        request.set_body( payload );
    }
    return request;
}

web::http::client::http_client_config CWebHTTPClient::createConfig() const noexcept
{
    web::http::client::http_client_config config;
    config.set_timeout( std::chrono::milliseconds( CWebHTTPClient::DEFAULT_TIMEOUT_MS ) );
    return config;
}

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions