diff options
author | fireice-uk <fireice-uk@users.noreply.github.com> | 2017-10-05 15:08:00 +0100 |
---|---|---|
committer | fireice-uk <fireice-uk@users.noreply.github.com> | 2017-10-05 15:08:00 +0100 |
commit | cb65ae3f78752541eb52e867f7e80455542b2867 (patch) | |
tree | 96da99b95327c4ee66ebbb30fdac9f479bad18e3 /xmrstak/backend/cpu | |
parent | 9c3a71ef090ea783a1124bd981dc1ce6e79b3309 (diff) | |
download | xmr-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.cpp | 19 | ||||
-rw-r--r-- | xmrstak/backend/cpu/minethd.hpp | 1 |
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; |