diff options
author | Arne Juul <arnej@yahooinc.com> | 2023-08-03 08:59:14 +0000 |
---|---|---|
committer | Arne Juul <arnej@yahooinc.com> | 2023-08-03 08:59:14 +0000 |
commit | ac375ae9bdb5760bbfd640427b96441bad06a4c8 (patch) | |
tree | fa7471b2be00e0f02bc0b2ff17f929b0dec4ec42 /fnet | |
parent | 142e357a58381b753786cbdcbebb1f5bd051e724 (diff) |
use std::atomic<std::shared_ptr>
Diffstat (limited to 'fnet')
-rw-r--r-- | fnet/src/vespa/fnet/connection.cpp | 12 | ||||
-rw-r--r-- | 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<ResolveHandler>(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<ResolveHandler>; + using ResolveHandlerSP = std::atomic<std::shared_ptr<ResolveHandler>>; FNET_IPacketStreamer *_streamer; // custom packet streamer FNET_IServerAdapter *_serverAdapter; // only on server side vespalib::CryptoSocket::UP _socket; // socket for this conn |