diff --git a/src/asio_client_session_impl.cc b/src/asio_client_session_impl.cc index 28bf0cc5..982dae4d 100644 --- a/src/asio_client_session_impl.cc +++ b/src/asio_client_session_impl.cc @@ -69,17 +69,17 @@ void session_impl::start_resolve(const std::string &host, const std::string &service) { deadline_.expires_from_now(connect_timeout_); - auto self = this->shared_from_this(); + auto self = shared_from_this(); resolver_.async_resolve({host, service}, - [this, self](const boost::system::error_code &ec, + [self](const boost::system::error_code &ec, tcp::resolver::iterator endpoint_it) { if (ec) { - not_connected(ec); + self->not_connected(ec); return; } - start_connect(endpoint_it); + self->start_connect(endpoint_it); }); deadline_.async_wait(std::bind(&session_impl::handle_deadline, self)); @@ -597,38 +597,38 @@ void session_impl::do_read() { auto self = this->shared_from_this(); - read_socket([this, self](const boost::system::error_code &ec, + read_socket([self](const boost::system::error_code &ec, std::size_t bytes_transferred) { if (ec) { - if (!should_stop()) { - call_error_cb(ec); + if (!self->should_stop()) { + self->call_error_cb(ec); } - stop(); + self->stop(); return; } { - callback_guard cg(*this); + callback_guard cg(*self); auto rv = - nghttp2_session_mem_recv(session_, rb_.data(), bytes_transferred); + nghttp2_session_mem_recv(self->session_, self->rb_.data(), bytes_transferred); if (rv != static_cast(bytes_transferred)) { - call_error_cb(make_error_code( + self->call_error_cb(make_error_code( static_cast(rv < 0 ? rv : NGHTTP2_ERR_PROTO))); - stop(); + self->stop(); return; } } - do_write(); + self->do_write(); - if (should_stop()) { - stop(); + if (self->should_stop()) { + self->stop(); return; } - do_read(); + self->do_read(); }); } @@ -695,17 +695,17 @@ void session_impl::do_write() { auto self = this->shared_from_this(); write_socket( - [this, self](const boost::system::error_code &ec, std::size_t n) { + [self](const boost::system::error_code &ec, std::size_t n) { if (ec) { - call_error_cb(ec); - stop(); + self->call_error_cb(ec); + self->stop(); return; } - wblen_ = 0; - writing_ = false; + self->wblen_ = 0; + self->writing_ = false; - do_write(); + self->do_write(); }); } diff --git a/src/asio_client_session_tcp_impl.cc b/src/asio_client_session_tcp_impl.cc index 398ce767..77aa676e 100644 --- a/src/asio_client_session_tcp_impl.cc +++ b/src/asio_client_session_tcp_impl.cc @@ -37,19 +37,20 @@ session_tcp_impl::session_tcp_impl( session_tcp_impl::~session_tcp_impl() {} void session_tcp_impl::start_connect(tcp::resolver::iterator endpoint_it) { + auto self = shared_from_this(); boost::asio::async_connect(socket_, endpoint_it, - [this](const boost::system::error_code &ec, + [self](const boost::system::error_code &ec, tcp::resolver::iterator endpoint_it) { - if (stopped()) { + if (self->stopped()) { return; } if (ec) { - not_connected(ec); + self->not_connected(ec); return; } - connected(endpoint_it); + self->connected(endpoint_it); }); } diff --git a/src/asio_client_session_tls_impl.cc b/src/asio_client_session_tls_impl.cc index e37d7b02..60e5a167 100644 --- a/src/asio_client_session_tls_impl.cc +++ b/src/asio_client_session_tls_impl.cc @@ -43,37 +43,38 @@ session_tls_impl::session_tls_impl( session_tls_impl::~session_tls_impl() {} void session_tls_impl::start_connect(tcp::resolver::iterator endpoint_it) { + auto self = std::static_pointer_cast(shared_from_this()); boost::asio::async_connect( - socket(), endpoint_it, [this](const boost::system::error_code &ec, + socket(), endpoint_it, [self](const boost::system::error_code &ec, tcp::resolver::iterator endpoint_it) { - if (stopped()) { + if (self->stopped()) { return; } if (ec) { - not_connected(ec); + self->not_connected(ec); return; } - socket_.async_handshake( + self->socket_.async_handshake( boost::asio::ssl::stream_base::client, - [this, endpoint_it](const boost::system::error_code &ec) { - if (stopped()) { + [self, endpoint_it](const boost::system::error_code &ec) { + if (self->stopped()) { return; } if (ec) { - not_connected(ec); + self->not_connected(ec); return; } - if (!tls_h2_negotiated(socket_)) { - not_connected(make_error_code( + if (!tls_h2_negotiated(self->socket_)) { + self->not_connected(make_error_code( NGHTTP2_ASIO_ERR_TLS_NO_APP_PROTO_NEGOTIATED)); return; } - connected(endpoint_it); + self->connected(endpoint_it); }); }); }