summaryrefslogtreecommitdiffstats
path: root/fnet
diff options
context:
space:
mode:
authorArne Juul <arnej@yahooinc.com>2023-08-03 08:59:14 +0000
committerArne Juul <arnej@yahooinc.com>2023-08-03 08:59:14 +0000
commitac375ae9bdb5760bbfd640427b96441bad06a4c8 (patch)
treefa7471b2be00e0f02bc0b2ff17f929b0dec4ec42 /fnet
parent142e357a58381b753786cbdcbebb1f5bd051e724 (diff)
use std::atomic<std::shared_ptr>
Diffstat (limited to 'fnet')
-rw-r--r--fnet/src/vespa/fnet/connection.cpp12
-rw-r--r--fnet/src/vespa/fnet/connection.h2
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