summaryrefslogtreecommitdiffstats
path: root/fnet
diff options
context:
space:
mode:
authorArne Juul <arnej@yahooinc.com>2023-08-03 09:15:03 +0000
committerArne Juul <arnej@yahooinc.com>2023-08-03 09:15:03 +0000
commit6b6f6c45ba955b5b14c359c9f59481866bbd4677 (patch)
tree227b4bb13588052950c38e1e7ca1a452969481f8 /fnet
parentac375ae9bdb5760bbfd640427b96441bad06a4c8 (diff)
use atomic swap in handle_add_event
Diffstat (limited to 'fnet')
-rw-r--r--fnet/src/vespa/fnet/connection.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/fnet/src/vespa/fnet/connection.cpp b/fnet/src/vespa/fnet/connection.cpp
index f369e2b08c8..a770561344f 100644
--- a/fnet/src/vespa/fnet/connection.cpp
+++ b/fnet/src/vespa/fnet/connection.cpp
@@ -555,11 +555,12 @@ FNET_Connection::server_adapter()
bool
FNET_Connection::handle_add_event()
{
- if (_resolve_handler.load()) {
+ std::shared_ptr<ResolveHandler> resolve_handler = _resolve_handler.exchange({});
+ if (resolve_handler) {
auto tweak = [this](vespalib::SocketHandle &handle) { return Owner()->tune(handle); };
- _socket = Owner()->owner().create_client_crypto_socket(_resolve_handler.load()->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.store({});
+ resolve_handler.reset();
}
return (_socket && (_socket->get_fd() >= 0));
}