P2PServer: connect to peers from the event loop thread

Better thread safety
pull/22/head
SChernykh 2021-09-07 12:56:22 +02:00
parent 333cfbefaf
commit 73c8b1294a
2 changed files with 8 additions and 3 deletions

View File

@ -41,6 +41,7 @@ P2PServer::P2PServer(p2pool* pool)
, m_pool(pool) , m_pool(pool)
, m_cache(new BlockCache()) , m_cache(new BlockCache())
, m_cacheLoaded(false) , m_cacheLoaded(false)
, m_initialPeerList(pool->params().m_p2pPeerList)
, m_rd{} , m_rd{}
, m_rng(m_rd()) , m_rng(m_rd())
, m_block(new PoolBlock()) , m_block(new PoolBlock())
@ -76,16 +77,14 @@ P2PServer::P2PServer(p2pool* pool)
} }
m_timer.data = this; m_timer.data = this;
err = uv_timer_start(&m_timer, on_timer, 10000, 2000); err = uv_timer_start(&m_timer, on_timer, 1000, 2000);
if (err) { if (err) {
LOGERR(1, "failed to start timer, error " << uv_err_name(err)); LOGERR(1, "failed to start timer, error " << uv_err_name(err));
panic(); panic();
} }
load_saved_peer_list(); load_saved_peer_list();
start_listening(pool->params().m_p2pAddresses); start_listening(pool->params().m_p2pAddresses);
connect_to_peers(pool->params().m_p2pPeerList);
} }
P2PServer::~P2PServer() P2PServer::~P2PServer()
@ -579,6 +578,11 @@ void P2PServer::print_status()
void P2PServer::on_timer() void P2PServer::on_timer()
{ {
if (!m_initialPeerList.empty()) {
connect_to_peers(m_initialPeerList);
m_initialPeerList.clear();
}
flush_cache(); flush_cache();
download_missing_blocks(); download_missing_blocks();
update_peer_list(); update_peer_list();

View File

@ -124,6 +124,7 @@ private:
p2pool* m_pool; p2pool* m_pool;
BlockCache* m_cache; BlockCache* m_cache;
bool m_cacheLoaded; bool m_cacheLoaded;
std::string m_initialPeerList;
uv_rwlock_t m_cachedBlocksLock; uv_rwlock_t m_cachedBlocksLock;
std::unordered_map<hash, PoolBlock*> m_cachedBlocks; std::unordered_map<hash, PoolBlock*> m_cachedBlocks;