diff --git a/external/src/RandomX b/external/src/RandomX index f1fb568..0b4d553 160000 --- a/external/src/RandomX +++ b/external/src/RandomX @@ -1 +1 @@ -Subproject commit f1fb56896ed4ab5bf5d1040931b60c73204097c7 +Subproject commit 0b4d553b20a20387a52730e3e7d234e7a4042419 diff --git a/src/block_template.cpp b/src/block_template.cpp index 9cdb2bf..bfc7428 100644 --- a/src/block_template.cpp +++ b/src/block_template.cpp @@ -911,10 +911,11 @@ uint32_t BlockTemplate::get_hashing_blobs(uint32_t extra_nonce_start, uint32_t c for (uint32_t i = 0; i < count; ++i) { uint8_t blob[128]; - const uint32_t n = get_hashing_blob_nolock(extra_nonce_start + i, blob); + uint32_t n = get_hashing_blob_nolock(extra_nonce_start + i, blob); if (n > sizeof(blob)) { LOGERR(1, "internal error: get_hashing_blob_nolock returned too large blob size " << n << ", expected <= " << sizeof(blob)); + n = sizeof(blob); } else if (n < 76) { LOGERR(1, "internal error: get_hashing_blob_nolock returned too little blob size " << n << ", expected >= 76"); diff --git a/src/json_rpc_request.cpp b/src/json_rpc_request.cpp index 1f56b46..faed2db 100644 --- a/src/json_rpc_request.cpp +++ b/src/json_rpc_request.cpp @@ -26,7 +26,10 @@ static constexpr char log_category_prefix[] = "JSONRPCRequest "; namespace p2pool { JSONRPCRequest::JSONRPCRequest(const char* address, int port, const char* req, CallbackBase* cb) - : m_callback(cb) + : m_socket{} + , m_connect{} + , m_write{} + , m_callback(cb) , m_contentLength(0) , m_contentLengthHeader(false) , m_readBufInUse(false) diff --git a/src/p2pool.cpp b/src/p2pool.cpp index f0b4eb6..23d91be 100644 --- a/src/p2pool.cpp +++ b/src/p2pool.cpp @@ -1004,12 +1004,16 @@ int p2pool::run() return 1; } - { + try { ZMQReader z(m_params->m_host, m_params->m_zmqPort, this); get_info(); const int rc = uv_run(uv_default_loop_checked(), UV_RUN_DEFAULT); LOGINFO(1, "uv_run exited, result = " << rc); } + catch (const std::exception& e) { + LOGERR(1, "exception " << e.what()); + panic(); + } m_stopped = true; diff --git a/src/pow_hash.cpp b/src/pow_hash.cpp index 53bed68..c44cb78 100644 --- a/src/pow_hash.cpp +++ b/src/pow_hash.cpp @@ -130,7 +130,7 @@ void RandomX_Hasher::set_seed_async(const hash& seed) work->seed = seed; work->req.data = work; - uv_queue_work(uv_default_loop_checked(), &work->req, + const int err = uv_queue_work(uv_default_loop_checked(), &work->req, [](uv_work_t* req) { bkg_jobs_tracker.start("RandomX_Hasher::set_seed_async"); @@ -145,6 +145,14 @@ void RandomX_Hasher::set_seed_async(const hash& seed) bkg_jobs_tracker.stop("RandomX_Hasher::set_seed_async"); } ); + + if (err) { + LOGERR(1, "uv_queue_work failed, error " << uv_err_name(err)); + if (!work->pool->stopped()) { + work->hasher->set_seed(work->seed); + } + delete work; + } } void RandomX_Hasher::set_seed(const hash& seed) diff --git a/src/side_chain.cpp b/src/side_chain.cpp index e512c6a..7e2314f 100644 --- a/src/side_chain.cpp +++ b/src/side_chain.cpp @@ -634,8 +634,7 @@ void SideChain::print_status() Wallet w = m_pool->params().m_wallet; hash eph_public_key; for (size_t i = 0, n = m_chainTip->m_outputs.size(); i < n; ++i) { - w.get_eph_public_key(m_chainTip->m_txkeySec, i, eph_public_key); - if (m_chainTip->m_outputs[i].m_ephPublicKey == eph_public_key) { + if (w.get_eph_public_key(m_chainTip->m_txkeySec, i, eph_public_key) && (m_chainTip->m_outputs[i].m_ephPublicKey == eph_public_key)) { reward_share = m_chainTip->m_outputs[i].m_reward; break; } diff --git a/src/tcp_server.h b/src/tcp_server.h index 71aece2..438ebb3 100644 --- a/src/tcp_server.h +++ b/src/tcp_server.h @@ -178,7 +178,7 @@ private: protected: void start_listening(const std::string& listen_addresses); - std::atomic m_finished{ 0 }; + std::atomic m_finished; int m_listenPort; uv_loop_t m_loop; diff --git a/src/tcp_server.inl b/src/tcp_server.inl index d9c6640..c2409cc 100644 --- a/src/tcp_server.inl +++ b/src/tcp_server.inl @@ -24,6 +24,8 @@ namespace p2pool { template TCPServer::TCPServer(allocate_client_callback allocate_new_client) : m_allocateNewClient(allocate_new_client) + , m_loopThread{} + , m_finished(0) , m_listenPort(-1) , m_loopStopped(false) , m_numConnections(0) diff --git a/src/zmq_reader.cpp b/src/zmq_reader.cpp index 220e7db..4d586f6 100644 --- a/src/zmq_reader.cpp +++ b/src/zmq_reader.cpp @@ -50,7 +50,6 @@ ZMQReader::ZMQReader(const char* address, uint32_t zmq_port, MinerCallbackHandle if (!m_publisherPort) { LOGERR(1, "failed to to bind ZMQ publisher port, aborting"); panic(); - } const int err = uv_thread_create(&m_worker, run_wrapper, this);