diff options
author | Harald Musum <musum@yahooinc.com> | 2022-02-19 08:17:52 +0000 |
---|---|---|
committer | Harald Musum <musum@yahooinc.com> | 2022-02-19 08:17:52 +0000 |
commit | c2260addeb7bad53c9fd17f2e4651afe4b9a831a (patch) | |
tree | b4f90563a980689062a5d1d4e5fb662c51c44767 | |
parent | a866b8f3dd659e2d613438fb74f1f58bd00cc51b (diff) | |
parent | f21e73ccb973968da652e4a93fe8c0d4f031a5c7 (diff) |
Merge branch 'master' into hmusum/change-compare-method
-rw-r--r-- | fnet/src/vespa/fnet/transport_thread.cpp | 10 | ||||
-rw-r--r-- | fnet/src/vespa/fnet/transport_thread.h | 6 | ||||
-rw-r--r-- | searchlib/src/tests/common/geogcd/geo_gcd_test.cpp | 2 |
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); |