diff --git a/CHANGELOG.md b/CHANGELOG.md index 04098f4b..d537f751 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ Version XXX: * Add handler tracking locations to basic_stream. +* Add handler tracking locations to http operations. -------------------------------------------------------------------------------- diff --git a/include/boost/beast/http/impl/read.hpp b/include/boost/beast/http/impl/read.hpp index c97b6eda..3ddede68 100644 --- a/include/boost/beast/http/impl/read.hpp +++ b/include/boost/beast/http/impl/read.hpp @@ -97,6 +97,10 @@ public: , d_(beast::allocate_stable( *this, s, m)) { + BOOST_ASIO_HANDLER_LOCATION(( + __FILE__, __LINE__, + "http::async_read(msg)")); + http::async_read(d_.s, b, d_.p, std::move(*this)); } @@ -203,6 +207,11 @@ public: b_, size, ec, error::buffer_overflow); if(ec) goto upcall; + + BOOST_ASIO_HANDLER_LOCATION(( + __FILE__, __LINE__, + "http::async_read_some")); + s_.async_read_some(*mb, std::move(self)); } b_.commit(bytes_transferred); @@ -230,8 +239,14 @@ public: if(! cont_) { BOOST_ASIO_CORO_YIELD + { + BOOST_ASIO_HANDLER_LOCATION(( + __FILE__, __LINE__, + "http::async_read_some")); + net::post( beast::bind_front_handler(std::move(self), ec)); + } } self.complete(ec, bytes_transferred_); } @@ -264,15 +279,27 @@ public: if (Condition{}(p_)) { BOOST_ASIO_CORO_YIELD + { + BOOST_ASIO_HANDLER_LOCATION(( + __FILE__, __LINE__, + "http::async_read")); + net::post(std::move(self)); + } } else { do { BOOST_ASIO_CORO_YIELD + { + BOOST_ASIO_HANDLER_LOCATION(( + __FILE__, __LINE__, + "http::async_read")); + async_read_some( s_, b_, p_, std::move(self)); + } bytes_transferred_ += bytes_transferred; } while (!ec && !Condition{}(p_)); diff --git a/include/boost/beast/http/impl/write.hpp b/include/boost/beast/http/impl/write.hpp index 671108da..c0819a16 100644 --- a/include/boost/beast/http/impl/write.hpp +++ b/include/boost/beast/http/impl/write.hpp @@ -60,6 +60,10 @@ class write_some_op error_code& ec, ConstBufferSequence const& buffers) { + BOOST_ASIO_HANDLER_LOCATION(( + __FILE__, __LINE__, + "http::async_write_some")); + invoked = true; ec = {}; op_.s_.async_write_some( @@ -93,6 +97,11 @@ public: if(ec) { BOOST_ASSERT(! f.invoked); + + BOOST_ASIO_HANDLER_LOCATION(( + __FILE__, __LINE__, + "http::async_write_some")); + return net::post( s_.get_executor(), beast::bind_front_handler( @@ -107,6 +116,10 @@ public: BOOST_ASSERT(sr_.is_done()); } + BOOST_ASIO_HANDLER_LOCATION(( + __FILE__, __LINE__, + "http::async_write_some")); + return net::post( s_.get_executor(), beast::bind_front_handler( @@ -191,16 +204,28 @@ public: if(Predicate{}(sr_)) { BOOST_ASIO_CORO_YIELD - net::post( - s_.get_executor(), - std::move(*this)); + { + BOOST_ASIO_HANDLER_LOCATION(( + __FILE__, __LINE__, + "http::async_write")); + + net::post( + s_.get_executor(), + std::move(*this)); + } goto upcall; } for(;;) { BOOST_ASIO_CORO_YIELD - beast::http::async_write_some( - s_, sr_, std::move(*this)); + { + BOOST_ASIO_HANDLER_LOCATION(( + __FILE__, __LINE__, + "http::async_write")); + + beast::http::async_write_some( + s_, sr_, std::move(*this)); + } bytes_transferred_ += bytes_transferred; if(ec) goto upcall; @@ -248,6 +273,10 @@ public: void operator()() { + BOOST_ASIO_HANDLER_LOCATION(( + __FILE__, __LINE__, + "http::async_write(msg)")); + async_write(s_, sr_, std::move(*this)); }