From ab02bd9847021e0b03146edfaf9d495b633942cc Mon Sep 17 00:00:00 2001 From: XMRig <support@xmrig.com> Date: Sun, 28 Jul 2019 14:42:29 +0700 Subject: [PATCH] Fixed miner freeze when switch between RandomX variants. --- src/backend/common/interfaces/IBackend.h | 1 + src/backend/cpu/CpuBackend.cpp | 9 +++++++++ src/backend/cpu/CpuBackend.h | 1 + src/core/Miner.cpp | 4 ++++ 4 files changed, 15 insertions(+) diff --git a/src/backend/common/interfaces/IBackend.h b/src/backend/common/interfaces/IBackend.h index e19e00baf..2ec8bf045 100644 --- a/src/backend/common/interfaces/IBackend.h +++ b/src/backend/common/interfaces/IBackend.h @@ -52,6 +52,7 @@ public: virtual const Hashrate *hashrate() const = 0; virtual const String &profileName() const = 0; virtual const String &type() const = 0; + virtual void prepare(const Job &nextJob) = 0; virtual void printHashrate(bool details) = 0; virtual void setJob(const Job &job) = 0; virtual void start(IWorker *worker) = 0; diff --git a/src/backend/cpu/CpuBackend.cpp b/src/backend/cpu/CpuBackend.cpp index 3ab06b464..005ff1dee 100644 --- a/src/backend/cpu/CpuBackend.cpp +++ b/src/backend/cpu/CpuBackend.cpp @@ -170,6 +170,15 @@ const xmrig::String &xmrig::CpuBackend::type() const } +void xmrig::CpuBackend::prepare(const Job &nextJob) +{ + if (nextJob.algorithm().family() == Algorithm::RANDOM_X && nextJob.algorithm() != d_ptr->algo) { + d_ptr->workers.stop(); + d_ptr->threads.clear(); + } +} + + void xmrig::CpuBackend::printHashrate(bool details) { if (!details || !hashrate()) { diff --git a/src/backend/cpu/CpuBackend.h b/src/backend/cpu/CpuBackend.h index 613e7cb63..9e71c2470 100644 --- a/src/backend/cpu/CpuBackend.h +++ b/src/backend/cpu/CpuBackend.h @@ -49,6 +49,7 @@ protected: const Hashrate *hashrate() const override; const String &profileName() const override; const String &type() const override; + void prepare(const Job &nextJob) override; void printHashrate(bool details) override; void setJob(const Job &job) override; void start(IWorker *worker) override; diff --git a/src/core/Miner.cpp b/src/core/Miner.cpp index 9d977d120..e93036c1c 100644 --- a/src/core/Miner.cpp +++ b/src/core/Miner.cpp @@ -352,6 +352,10 @@ void xmrig::Miner::setEnabled(bool enabled) void xmrig::Miner::setJob(const Job &job, bool donate) { + for (IBackend *backend : d_ptr->backends) { + backend->prepare(job); + } + uv_rwlock_wrlock(&d_ptr->rwlock); const uint8_t index = donate ? 1 : 0;