diff --git a/minethd.cpp b/minethd.cpp index 5c7871d..fac9fb4 100644 --- a/minethd.cpp +++ b/minethd.cpp @@ -161,6 +161,7 @@ minethd::minethd(miner_work& pWork, size_t iNo, bool double_work, bool no_prefet bNoPrefetch = no_prefetch; this->affinity = affinity; + std::lock_guard lock(work_thd_mtx); if(double_work) oWorkThd = std::thread(&minethd::double_work_main, this); else @@ -363,6 +364,9 @@ minethd::cn_hash_fun minethd::func_selector(bool bHaveAes, bool bNoPrefetch) void minethd::pin_thd_affinity() { + //Lock is needed because we need to use oWorkThd + std::lock_guard lock(work_thd_mtx); + // pin memory to NUMA node bindMemoryToNUMANode(affinity); diff --git a/minethd.h b/minethd.h index 3c88c26..293e8de 100644 --- a/minethd.h +++ b/minethd.h @@ -1,6 +1,7 @@ #pragma once #include #include +#include #include "crypto/cryptonight.h" class telemetry @@ -130,6 +131,8 @@ private: miner_work oWork; void pin_thd_affinity(); + // Held by the creating context to prevent a race cond with oWorkThd = std::thread(...) + std::mutex work_thd_mtx; std::thread oWorkThd; uint8_t iThreadNo;