diff options
author | psychocrypt <psychocrypt@users.noreply.github.com> | 2017-10-06 10:18:17 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-10-06 10:18:17 +0200 |
commit | 62217a2488de9e401948f97756a9f8e6e8d77249 (patch) | |
tree | 418ee9613558cc6595bdb4872c176afdd81d94aa /xmrstak/backend/cpu/minethd.cpp | |
parent | e96a761d5a748ab06749a18db5e16d87739d7716 (diff) | |
parent | cb65ae3f78752541eb52e867f7e80455542b2867 (diff) | |
download | xmr-stak-62217a2488de9e401948f97756a9f8e6e8d77249.zip xmr-stak-62217a2488de9e401948f97756a9f8e6e8d77249.tar.gz |
Merge pull request #19 from fireice-uk/topic-crash-fix
Port the crash fix from xmr-stak-cpu
Diffstat (limited to 'xmrstak/backend/cpu/minethd.cpp')
-rw-r--r-- | xmrstak/backend/cpu/minethd.cpp | 19 |
1 files changed, 15 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); |