From: Francis Dupont Date: Sat, 11 Apr 2020 13:30:56 +0000 (+0200) Subject: [#1171] Fixed TSan reported race X-Git-Tag: Kea-1.7.8~133 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=61767cf8ae72ba7323ce86694cb33cb0206158c7;p=thirdparty%2Fkea.git [#1171] Fixed TSan reported race --- diff --git a/src/bin/perfdhcp/tests/basic_scen_unittest.cc b/src/bin/perfdhcp/tests/basic_scen_unittest.cc index ead903c323..1b993eb5f1 100644 --- a/src/bin/perfdhcp/tests/basic_scen_unittest.cc +++ b/src/bin/perfdhcp/tests/basic_scen_unittest.cc @@ -24,6 +24,7 @@ #include #include #include +#include #include using namespace std; @@ -58,14 +59,16 @@ public: /// planned to send to perfdhcp. std::list> planned_responses_; + /// Mutex to protect state concurrent accesses + std::mutex mutex_; + /// Limit for sent packets. After this limit not more packets /// are sent. This simulate dropping responses. int start_dropping_after_cnt_; /// \brief Simulate receiving DHCPv4 packet. - virtual dhcp::Pkt4Ptr receive4(uint32_t timeout_sec, uint32_t timeout_usec) override { - (void)timeout_sec; // silence compile 'unused parameter' warning; - (void)timeout_usec; // silence compile 'unused parameter' warning; + virtual dhcp::Pkt4Ptr receive4(uint32_t /*timeout_sec*/, uint32_t /*timeout_usec*/) override { + std::lock_guard lock(mutex_); recv_cnt_++; if (planned_responses_.empty() || sent_cnt_ >= start_dropping_after_cnt_) { @@ -85,9 +88,8 @@ public: }; /// \brief Simulate receiving DHCPv6 packet. - virtual dhcp::Pkt6Ptr receive6(uint32_t timeout_sec, uint32_t timeout_usec) override { - (void)timeout_sec; // silence compile 'unused parameter' warning; - (void)timeout_usec; // silence compile 'unused parameter' warning; + virtual dhcp::Pkt6Ptr receive6(uint32_t /*timeout_sec*/, uint32_t /*timeout_usec*/) override { + std::lock_guard lock(mutex_); recv_cnt_++; if (planned_responses_.empty() || sent_cnt_ >= start_dropping_after_cnt_) { @@ -124,6 +126,7 @@ public: /// \brief Simulate sending DHCPv4 packet. virtual bool send(const dhcp::Pkt4Ptr& pkt) override { + std::lock_guard lock(mutex_); sent_cnt_++; pkt->updateTimestamp(); if (sent_cnt_ >= start_dropping_after_cnt_) { @@ -141,6 +144,7 @@ public: /// \brief Simulate sending DHCPv6 packet. virtual bool send(const dhcp::Pkt6Ptr& pkt) override { + std::lock_guard lock(mutex_); sent_cnt_++; pkt->updateTimestamp(); if (sent_cnt_ >= start_dropping_after_cnt_) { @@ -160,6 +164,7 @@ public: virtual IfacePtr getIface() override { return iface_; } void reset() { + std::lock_guard lock(mutex_); sent_cnt_ = 0; recv_cnt_ = 0; }