summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Musum <musum@yahooinc.com>2022-02-19 08:17:52 +0000
committerHarald Musum <musum@yahooinc.com>2022-02-19 08:17:52 +0000
commitc2260addeb7bad53c9fd17f2e4651afe4b9a831a (patch)
treeb4f90563a980689062a5d1d4e5fb662c51c44767
parenta866b8f3dd659e2d613438fb74f1f58bd00cc51b (diff)
parentf21e73ccb973968da652e4a93fe8c0d4f031a5c7 (diff)
Merge branch 'master' into hmusum/change-compare-method
-rw-r--r--fnet/src/vespa/fnet/transport_thread.cpp10
-rw-r--r--fnet/src/vespa/fnet/transport_thread.h6
-rw-r--r--searchlib/src/tests/common/geogcd/geo_gcd_test.cpp2
3 files changed, 11 insertions, 7 deletions
diff --git a/fnet/src/vespa/fnet/transport_thread.cpp b/fnet/src/vespa/fnet/transport_thread.cpp
index 8a0f3a8534a..53f8fea40cd 100644
--- a/fnet/src/vespa/fnet/transport_thread.cpp
+++ b/fnet/src/vespa/fnet/transport_thread.cpp
@@ -9,6 +9,7 @@
#include "transport.h"
#include <vespa/vespalib/net/socket_spec.h>
#include <vespa/vespalib/net/server_socket.h>
+#include <vespa/vespalib/util/atomic.h>
#include <vespa/vespalib/util/gate.h>
#include <csignal>
@@ -19,6 +20,7 @@ using vespalib::ServerSocket;
using vespalib::SocketHandle;
using vespalib::SocketSpec;
using vespalib::steady_clock;
+using namespace vespalib::atomic;
namespace {
@@ -46,7 +48,7 @@ FNET_TransportThread::AddComponent(FNET_IOComponent *comp)
_componentsTail = comp;
if (_timeOutHead == nullptr)
_timeOutHead = comp;
- _componentCnt++;
+ store_relaxed(_componentCnt, load_relaxed(_componentCnt) + 1);
} else {
comp->_ioc_prev = nullptr;
comp->_ioc_next = _componentsHead;
@@ -56,7 +58,7 @@ FNET_TransportThread::AddComponent(FNET_IOComponent *comp)
_componentsHead->_ioc_prev = comp;
}
_componentsHead = comp;
- _componentCnt++;
+ store_relaxed(_componentCnt, load_relaxed(_componentCnt) + 1);
}
}
@@ -74,7 +76,7 @@ FNET_TransportThread::RemoveComponent(FNET_IOComponent *comp)
comp->_ioc_prev->_ioc_next = comp->_ioc_next;
if (comp->_ioc_next != nullptr)
comp->_ioc_next->_ioc_prev = comp->_ioc_prev;
- _componentCnt--;
+ store_relaxed(_componentCnt, load_relaxed(_componentCnt) - 1);
}
@@ -549,7 +551,7 @@ FNET_TransportThread::endEventLoop() {
assert(_componentsHead == nullptr &&
_componentsTail == nullptr &&
_timeOutHead == nullptr &&
- _componentCnt == 0 &&
+ load_relaxed(_componentCnt) == 0 &&
_queue.IsEmpty_NoLock() &&
_myQueue.IsEmpty_NoLock());
diff --git a/fnet/src/vespa/fnet/transport_thread.h b/fnet/src/vespa/fnet/transport_thread.h
index 4452eba2825..cf1f68a8b39 100644
--- a/fnet/src/vespa/fnet/transport_thread.h
+++ b/fnet/src/vespa/fnet/transport_thread.h
@@ -39,7 +39,7 @@ private:
FNET_IOComponent *_componentsHead; // I/O component list head
FNET_IOComponent *_timeOutHead; // first IOC in list to time out
FNET_IOComponent *_componentsTail; // I/O component list tail
- uint32_t _componentCnt; // # of components
+ std::atomic<uint32_t> _componentCnt; // # of components
FNET_IOComponent *_deleteList; // IOC delete list
Selector _selector; // I/O event generator
FNET_PacketQueue_NoLock _queue; // outer event queue
@@ -266,7 +266,9 @@ public:
*
* @return the current number of IOComponents.
**/
- uint32_t GetNumIOComponents() { return _componentCnt; }
+ uint32_t GetNumIOComponents() const noexcept {
+ return _componentCnt.load(std::memory_order_relaxed);
+ }
/**
* Add an I/O component to the working set of this transport
diff --git a/searchlib/src/tests/common/geogcd/geo_gcd_test.cpp b/searchlib/src/tests/common/geogcd/geo_gcd_test.cpp
index dd218c4ff04..296ed89a903 100644
--- a/searchlib/src/tests/common/geogcd/geo_gcd_test.cpp
+++ b/searchlib/src/tests/common/geogcd/geo_gcd_test.cpp
@@ -49,7 +49,7 @@ TEST(GeoGcdTest, computed_distances_seem_legit) {
double miles = km / 1.609344;
EXPECT_GE(miles, 0);
if (from.name == to.name) {
- EXPECT_EQ(miles, 0.0);
+ EXPECT_DOUBLE_EQ(miles, 0.0);
} else {
double exact = exact_distances[i][j];
printf("Distance from %s to %s (in miles): %.1f [more exact would be %.1f]\n", from.name, to.name, miles, exact);