From b2c412480aa2cc29bfbb90556f974e9294608898 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Tue, 22 Feb 2022 20:34:08 +0100 Subject: Avoid boost::bind()ing a shared_ptr. --- src/lib/encode_server_finder.cc | 16 ++++++++-------- src/lib/encode_server_finder.h | 4 +++- 2 files changed, 11 insertions(+), 9 deletions(-) (limited to 'src/lib') diff --git a/src/lib/encode_server_finder.cc b/src/lib/encode_server_finder.cc index 6b288d70d..200286fd9 100644 --- a/src/lib/encode_server_finder.cc +++ b/src/lib/encode_server_finder.cc @@ -203,16 +203,17 @@ catch (...) void EncodeServerFinder::start_accept () { - auto socket = make_shared(); + _accept_socket = make_shared(); + _listen_acceptor->async_accept ( - socket->socket(), - boost::bind(&EncodeServerFinder::handle_accept, this, boost::asio::placeholders::error, socket) + _accept_socket->socket(), + boost::bind(&EncodeServerFinder::handle_accept, this, boost::asio::placeholders::error) ); } void -EncodeServerFinder::handle_accept (boost::system::error_code ec, shared_ptr socket) +EncodeServerFinder::handle_accept (boost::system::error_code ec) { if (ec) { start_accept (); @@ -220,18 +221,17 @@ EncodeServerFinder::handle_accept (boost::system::error_code ec, shared_ptrread (reinterpret_cast(&length), sizeof(uint32_t)); + _accept_socket->read (reinterpret_cast(&length), sizeof(uint32_t)); length = ntohl (length); scoped_array buffer(new char[length]); - socket->read (reinterpret_cast(buffer.get()), length); + _accept_socket->read (reinterpret_cast(buffer.get()), length); string s (buffer.get()); auto xml = make_shared("ServerAvailable"); xml->read_string (s); - auto const ip = socket->socket().remote_endpoint().address().to_string(); - } + auto const ip = _accept_socket->socket().remote_endpoint().address().to_string(); bool changed = false; { boost::mutex::scoped_lock lm (_servers_mutex); diff --git a/src/lib/encode_server_finder.h b/src/lib/encode_server_finder.h index efb498880..f8a30af54 100644 --- a/src/lib/encode_server_finder.h +++ b/src/lib/encode_server_finder.h @@ -67,7 +67,7 @@ private: void listen_thread (); void start_accept (); - void handle_accept (boost::system::error_code ec, std::shared_ptr socket); + void handle_accept (boost::system::error_code ec); void config_changed (Config::Property what); @@ -88,5 +88,7 @@ private: boost::condition _search_condition; boost::mutex _search_condition_mutex; + std::shared_ptr _accept_socket; + static EncodeServerFinder* _instance; }; -- cgit v1.2.3