From ac375ae9bdb5760bbfd640427b96441bad06a4c8 Mon Sep 17 00:00:00 2001 From: Arne Juul Date: Thu, 3 Aug 2023 08:59:14 +0000 Subject: use std::atomic --- fnet/src/vespa/fnet/connection.cpp | 12 ++++++------ fnet/src/vespa/fnet/connection.h | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/fnet/src/vespa/fnet/connection.cpp b/fnet/src/vespa/fnet/connection.cpp index 314fc7517e5..f369e2b08c8 100644 --- a/fnet/src/vespa/fnet/connection.cpp +++ b/fnet/src/vespa/fnet/connection.cpp @@ -526,7 +526,7 @@ FNET_Connection::FNET_Connection(FNET_TransportThread *owner, FNET_Connection::~FNET_Connection() { - assert(!_resolve_handler); + assert(!_resolve_handler.load()); _num_connections.fetch_sub(1, std::memory_order_relaxed); } @@ -541,7 +541,7 @@ FNET_Connection::Init() // initiate async resolve if (IsClient()) { _resolve_handler = std::make_shared(this); - Owner()->owner().resolve_async(GetSpec(), _resolve_handler); + Owner()->owner().resolve_async(GetSpec(), _resolve_handler.load()); } return true; } @@ -555,11 +555,11 @@ FNET_Connection::server_adapter() bool FNET_Connection::handle_add_event() { - if (_resolve_handler) { + if (_resolve_handler.load()) { auto tweak = [this](vespalib::SocketHandle &handle) { return Owner()->tune(handle); }; - _socket = Owner()->owner().create_client_crypto_socket(_resolve_handler->address.connect(tweak), vespalib::SocketSpec(GetSpec())); + _socket = Owner()->owner().create_client_crypto_socket(_resolve_handler.load()->address.connect(tweak), vespalib::SocketSpec(GetSpec())); _ioc_socket_fd = _socket->get_fd(); - _resolve_handler.reset(); + _resolve_handler.store({}); } return (_socket && (_socket->get_fd() >= 0)); } @@ -680,7 +680,7 @@ FNET_Connection::Sync() void FNET_Connection::Close() { - _resolve_handler.reset(); + _resolve_handler.store({}); detach_selector(); SetState(FNET_CLOSED); _ioc_socket_fd = -1; diff --git a/fnet/src/vespa/fnet/connection.h b/fnet/src/vespa/fnet/connection.h index 0db71db14e0..8fe78cba8c2 100644 --- a/fnet/src/vespa/fnet/connection.h +++ b/fnet/src/vespa/fnet/connection.h @@ -71,7 +71,7 @@ private: void handle_result(vespalib::SocketAddress result) override; ~ResolveHandler(); }; - using ResolveHandlerSP = std::shared_ptr; + using ResolveHandlerSP = std::atomic>; FNET_IPacketStreamer *_streamer; // custom packet streamer FNET_IServerAdapter *_serverAdapter; // only on server side vespalib::CryptoSocket::UP _socket; // socket for this conn -- cgit v1.2.3