From 5a274cd2bf838a8c1d26dc8d8980122b49c59ecf Mon Sep 17 00:00:00 2001 From: clemahieu Date: Thu, 18 Nov 2021 17:40:47 +0000 Subject: [PATCH 1/2] Fix issue identified with valgrind where priv_key starts uninitialized. --- nano/core_test/bootstrap.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/nano/core_test/bootstrap.cpp b/nano/core_test/bootstrap.cpp index 57da5b07..1fc41623 100644 --- a/nano/core_test/bootstrap.cpp +++ b/nano/core_test/bootstrap.cpp @@ -1532,19 +1532,18 @@ TEST (frontier_req, confirmed_frontier) { nano::system system (1); auto node1 = system.nodes[0]; - nano::raw_key priv_key; + nano::keypair key_before_genesis; // Public key before genesis in accounts table - while (nano::pub_key (priv_key).number () >= nano::dev::genesis_key.pub.number ()) + while (key_before_genesis.pub.number () >= nano::dev::genesis_key.pub.number ()) { - priv_key = nano::keypair ().prv; + key_before_genesis = nano::keypair (); } - nano::keypair key_before_genesis (priv_key.to_string ()); + nano::keypair key_after_genesis; // Public key after genesis in accounts table - while (nano::pub_key (priv_key).number () <= nano::dev::genesis_key.pub.number ()) + while (key_after_genesis.pub.number () <= nano::dev::genesis_key.pub.number ()) { - priv_key = nano::keypair ().prv; + key_after_genesis = nano::keypair (); } - nano::keypair key_after_genesis (priv_key.to_string ()); nano::state_block_builder builder; auto send1 = builder From 5d369ddcdd6c9c668f1d6703066c34728e15643c Mon Sep 17 00:00:00 2001 From: clemahieu Date: Fri, 19 Nov 2021 21:29:17 +0000 Subject: [PATCH 2/2] Add suppressions for Rijndael::Base::FillEncTable and Rijndael::Base::FillDecTable. There is a race condition when initializing these tables but since their contents is static, the fields will always have the correct, constant values. --- nano/core_test/uint256_union.cpp | 19 +++++++++++++++++++ tsan_suppressions | 2 ++ 2 files changed, 21 insertions(+) diff --git a/nano/core_test/uint256_union.cpp b/nano/core_test/uint256_union.cpp index bde76e3d..89300e16 100644 --- a/nano/core_test/uint256_union.cpp +++ b/nano/core_test/uint256_union.cpp @@ -1,8 +1,11 @@ +#include #include #include #include +#include + namespace { template @@ -567,3 +570,19 @@ void check_operator_greater_than (Num lhs, Num rhs) ASSERT_FALSE (rhs > rhs); } } + +TEST (random_pool, multithreading) +{ + std::vector threads; + for (auto i = 0; i < 100; ++i) + { + threads.emplace_back ([] () { + nano::uint256_union number; + nano::random_pool::generate_block (number.bytes.data (), number.bytes.size ()); + }); + } + for (auto & i : threads) + { + i.join (); + } +} diff --git a/tsan_suppressions b/tsan_suppressions index 85f74e58..e08006ce 100644 --- a/tsan_suppressions +++ b/tsan_suppressions @@ -1,2 +1,4 @@ race:mdb.c race:rocksdb +race:Rijndael::Base::FillEncTable +race:Rijndael::Base::FillDecTable