From 04d3d92c90e0875e42eae3784ed9aa64cc33fdcd Mon Sep 17 00:00:00 2001 From: HÃ¥vard Pettersen Date: Wed, 9 Aug 2023 14:02:35 +0000 Subject: atomic should not be needed using atomic might hide issues from TSAN --- fnet/src/vespa/fnet/connection.cpp | 13 ++++++------- fnet/src/vespa/fnet/connection.h | 2 +- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/fnet/src/vespa/fnet/connection.cpp b/fnet/src/vespa/fnet/connection.cpp index a770561344f..314fc7517e5 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.load()); + assert(!_resolve_handler); _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.load()); + Owner()->owner().resolve_async(GetSpec(), _resolve_handler); } return true; } @@ -555,12 +555,11 @@ FNET_Connection::server_adapter() bool FNET_Connection::handle_add_event() { - std::shared_ptr resolve_handler = _resolve_handler.exchange({}); - if (resolve_handler) { + if (_resolve_handler) { 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->address.connect(tweak), vespalib::SocketSpec(GetSpec())); _ioc_socket_fd = _socket->get_fd(); - resolve_handler.reset(); + _resolve_handler.reset(); } return (_socket && (_socket->get_fd() >= 0)); } @@ -681,7 +680,7 @@ FNET_Connection::Sync() void FNET_Connection::Close() { - _resolve_handler.store({}); + _resolve_handler.reset(); 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 8fe78cba8c2..0db71db14e0 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::atomic>; + using ResolveHandlerSP = std::shared_ptr; 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