From c855bb769af8d715ca56199bf2fcf30ad1c2a258 Mon Sep 17 00:00:00 2001 From: SChernykh Date: Tue, 17 Jan 2023 13:20:09 +0100 Subject: [PATCH] PoolBlock: removed unnecessary mutex --- src/p2p_server.cpp | 4 +++- src/pool_block.cpp | 24 +----------------------- src/pool_block.h | 3 --- src/pool_block_parser.inl | 2 -- 4 files changed, 4 insertions(+), 29 deletions(-) diff --git a/src/p2p_server.cpp b/src/p2p_server.cpp index 0ec7735..4dea4e9 100644 --- a/src/p2p_server.cpp +++ b/src/p2p_server.cpp @@ -1578,6 +1578,7 @@ void P2PServer::P2PClient::send_handshake_solution(const uint8_t (&challenge)[CH P2PClient* client; P2PServer* server; uint32_t reset_counter; + bool is_incoming; uint8_t challenge[CHALLENGE_SIZE]; uint64_t salt; @@ -1590,6 +1591,7 @@ void P2PServer::P2PClient::send_handshake_solution(const uint8_t (&challenge)[CH work->client = this; work->server = server; work->reset_counter = m_resetCounter.load(); + work->is_incoming = m_isIncoming; memcpy(work->challenge, challenge, CHALLENGE_SIZE); work->salt = server->get_random64(); @@ -1630,7 +1632,7 @@ void P2PServer::P2PClient::send_handshake_solution(const uint8_t (&challenge)[CH return; } - if (work->client->m_isIncoming) { + if (work->is_incoming) { // This is an incoming connection, so it must do PoW, not us return; } diff --git a/src/pool_block.cpp b/src/pool_block.cpp index 25b86fe..f122d90 100644 --- a/src/pool_block.cpp +++ b/src/pool_block.cpp @@ -54,12 +54,10 @@ PoolBlock::PoolBlock() , m_precalculated(false) , m_localTimestamp(seconds_since_epoch()) { - uv_mutex_init_checked(&m_lock); } PoolBlock::PoolBlock(const PoolBlock& b) { - uv_mutex_init_checked(&m_lock); operator=(b); } @@ -70,11 +68,6 @@ PoolBlock& PoolBlock::operator=(const PoolBlock& b) return *this; } - const int lock_result = uv_mutex_trylock(&b.m_lock); - if (lock_result) { - LOGERR(1, "operator= uv_mutex_trylock failed. Fix the code!"); - } - #if POOL_BLOCK_DEBUG m_mainChainDataDebug = b.m_mainChainDataDebug; m_sideChainDataDebug = b.m_sideChainDataDebug; @@ -110,25 +103,14 @@ PoolBlock& PoolBlock::operator=(const PoolBlock& b) m_localTimestamp = seconds_since_epoch(); - if (lock_result == 0) { - uv_mutex_unlock(&b.m_lock); - } - return *this; } PoolBlock::~PoolBlock() { - uv_mutex_destroy(&m_lock); } std::vector PoolBlock::serialize_mainchain_data(size_t* header_size, size_t* miner_tx_size, int* outputs_offset, int* outputs_blob_size, const uint32_t* nonce, const uint32_t* extra_nonce) const -{ - MutexLock lock(m_lock); - return serialize_mainchain_data_nolock(header_size, miner_tx_size, outputs_offset, outputs_blob_size, nonce, extra_nonce); -} - -std::vector PoolBlock::serialize_mainchain_data_nolock(size_t* header_size, size_t* miner_tx_size, int* outputs_offset, int* outputs_blob_size, const uint32_t* nonce, const uint32_t* extra_nonce) const { std::vector data; data.reserve(128 + m_outputs.size() * 39 + m_transactions.size() * HASH_SIZE); @@ -237,8 +219,6 @@ std::vector PoolBlock::serialize_sidechain_data() const { std::vector data; - MutexLock lock(m_lock); - data.reserve((m_uncles.size() + 4) * HASH_SIZE + 36); const hash& spend = m_minerWallet.spend_public_key(); @@ -321,10 +301,8 @@ bool PoolBlock::get_pow_hash(RandomX_Hasher_Base* hasher, uint64_t height, const size_t blob_size = 0; { - MutexLock lock(m_lock); - size_t header_size, miner_tx_size; - const std::vector mainchain_data = serialize_mainchain_data_nolock(&header_size, &miner_tx_size, nullptr, nullptr, nullptr, nullptr); + const std::vector mainchain_data = serialize_mainchain_data(&header_size, &miner_tx_size, nullptr, nullptr, nullptr, nullptr); if (!header_size || !miner_tx_size || (mainchain_data.size() < header_size + miner_tx_size)) { LOGERR(1, "tried to calculate PoW of uninitialized block"); diff --git a/src/pool_block.h b/src/pool_block.h index e14f799..9186a0d 100644 --- a/src/pool_block.h +++ b/src/pool_block.h @@ -63,8 +63,6 @@ struct PoolBlock PoolBlock(const PoolBlock& b); PoolBlock& operator=(const PoolBlock& b); - mutable uv_mutex_t m_lock; - #if POOL_BLOCK_DEBUG std::vector m_mainChainDataDebug; std::vector m_sideChainDataDebug; @@ -138,7 +136,6 @@ struct PoolBlock uint64_t m_localTimestamp; std::vector serialize_mainchain_data(size_t* header_size = nullptr, size_t* miner_tx_size = nullptr, int* outputs_offset = nullptr, int* outputs_blob_size = nullptr, const uint32_t* nonce = nullptr, const uint32_t* extra_nonce = nullptr) const; - std::vector serialize_mainchain_data_nolock(size_t* header_size, size_t* miner_tx_size, int* outputs_offset, int* outputs_blob_size, const uint32_t* nonce, const uint32_t* extra_nonce) const; std::vector serialize_sidechain_data() const; int deserialize(const uint8_t* data, size_t size, const SideChain& sidechain, uv_loop_t* loop, bool compact); diff --git a/src/pool_block_parser.inl b/src/pool_block_parser.inl index 79a5c34..3b7bdc7 100644 --- a/src/pool_block_parser.inl +++ b/src/pool_block_parser.inl @@ -61,8 +61,6 @@ int PoolBlock::deserialize(const uint8_t* data, size_t size, const SideChain& si #define READ_BUF(buf, size) do { if (!read_buf((buf), (size))) return __LINE__; } while(0) - MutexLock lock(m_lock); - READ_BYTE(m_majorVersion); if (m_majorVersion > HARDFORK_SUPPORTED_VERSION) return __LINE__;