summaryrefslogtreecommitdiffstats
path: root/xmrstak/backend/cpu
diff options
context:
space:
mode:
authorfireice-uk <fireice-uk@users.noreply.github.com>2017-10-05 15:08:00 +0100
committerfireice-uk <fireice-uk@users.noreply.github.com>2017-10-05 15:08:00 +0100
commitcb65ae3f78752541eb52e867f7e80455542b2867 (patch)
tree96da99b95327c4ee66ebbb30fdac9f479bad18e3 /xmrstak/backend/cpu
parent9c3a71ef090ea783a1124bd981dc1ce6e79b3309 (diff)
downloadxmr-stak-cb65ae3f78752541eb52e867f7e80455542b2867.zip
xmr-stak-cb65ae3f78752541eb52e867f7e80455542b2867.tar.gz
Port the crash fix from xmr-stak-cpu
Diffstat (limited to 'xmrstak/backend/cpu')
-rw-r--r--xmrstak/backend/cpu/minethd.cpp19
-rw-r--r--xmrstak/backend/cpu/minethd.hpp1
2 files changed, 16 insertions, 4 deletions
diff --git a/xmrstak/backend/cpu/minethd.cpp b/xmrstak/backend/cpu/minethd.cpp
index b02540a..8a65a3b 100644
--- a/xmrstak/backend/cpu/minethd.cpp
+++ b/xmrstak/backend/cpu/minethd.cpp
@@ -419,6 +419,13 @@ minethd::cn_hash_fun_dbl minethd::func_dbl_selector(bool bHaveAes, bool bNoPrefe
return func_table[digit.to_ulong()];
}
+uint32_t* minethd::prep_double_work(uint8_t bDoubleWorkBlob[sizeof(miner_work::bWorkBlob) * 2])
+{
+ memcpy(bDoubleWorkBlob, oWork.bWorkBlob, oWork.iWorkSize);
+ memcpy(bDoubleWorkBlob + oWork.iWorkSize, oWork.bWorkBlob, oWork.iWorkSize);
+ return (uint32_t*)(bDoubleWorkBlob + oWork.iWorkSize + 39);
+}
+
void minethd::double_work_main()
{
if(affinity >= 0) //-1 means no affinity
@@ -431,7 +438,7 @@ void minethd::double_work_main()
uint64_t *piHashVal0, *piHashVal1;
uint32_t *piNonce0, *piNonce1;
uint8_t bDoubleHashOut[64];
- uint8_t bDoubleWorkBlob[sizeof(miner_work::bWorkBlob) * 2];
+ uint8_t bDoubleWorkBlob[sizeof(miner_work::bWorkBlob) * 2];
uint32_t iNonce;
job_result res;
@@ -442,7 +449,11 @@ void minethd::double_work_main()
piHashVal0 = (uint64_t*)(bDoubleHashOut + 24);
piHashVal1 = (uint64_t*)(bDoubleHashOut + 32 + 24);
piNonce0 = (uint32_t*)(bDoubleWorkBlob + 39);
- piNonce1 = nullptr;
+
+ if(!oWork.bStall)
+ piNonce1 = prep_double_work(bDoubleWorkBlob);
+ else
+ piNonce1 = nullptr;
globalStates::inst().inst().iConsumeCnt++;
@@ -460,7 +471,7 @@ void minethd::double_work_main()
consume_work();
memcpy(bDoubleWorkBlob, oWork.bWorkBlob, oWork.iWorkSize);
memcpy(bDoubleWorkBlob + oWork.iWorkSize, oWork.bWorkBlob, oWork.iWorkSize);
- piNonce1 = (uint32_t*)(bDoubleWorkBlob + oWork.iWorkSize + 39);
+ piNonce1 = prep_double_work(bDoubleWorkBlob);
continue;
}
@@ -500,7 +511,7 @@ void minethd::double_work_main()
consume_work();
memcpy(bDoubleWorkBlob, oWork.bWorkBlob, oWork.iWorkSize);
memcpy(bDoubleWorkBlob + oWork.iWorkSize, oWork.bWorkBlob, oWork.iWorkSize);
- piNonce1 = (uint32_t*)(bDoubleWorkBlob + oWork.iWorkSize + 39);
+ piNonce1 = prep_double_work(bDoubleWorkBlob);
}
cryptonight_free_ctx(ctx0);
diff --git a/xmrstak/backend/cpu/minethd.hpp b/xmrstak/backend/cpu/minethd.hpp
index a091ee8..58d378e 100644
--- a/xmrstak/backend/cpu/minethd.hpp
+++ b/xmrstak/backend/cpu/minethd.hpp
@@ -38,6 +38,7 @@ private:
void work_main();
void double_work_main();
void consume_work();
+ uint32_t* prep_double_work(uint8_t bDoubleWorkBlob[sizeof(miner_work::bWorkBlob) * 2]);
uint64_t iJobNo;
OpenPOWER on IntegriCloud