mirror of
https://github.com/monero-project/monero.git
synced 2025-07-30 15:28:44 -04:00
threadpool: guard against exceptions in jobs, and armour plating
Those would, if uncaught, exit run and leave the waiter to wait indefinitely for the number of active jobs to reach 0
This commit is contained in:
parent
5d850dde99
commit
6a37da837e
8 changed files with 72 additions and 60 deletions
|
@ -937,12 +937,13 @@ namespace rct {
|
|||
{
|
||||
if (semantics) {
|
||||
tools::threadpool& tpool = tools::threadpool::getInstance();
|
||||
tools::threadpool::waiter waiter;
|
||||
tools::threadpool::waiter waiter(tpool);
|
||||
std::deque<bool> results(rv.outPk.size(), false);
|
||||
DP("range proofs verified?");
|
||||
for (size_t i = 0; i < rv.outPk.size(); i++)
|
||||
tpool.submit(&waiter, [&, i] { results[i] = verRange(rv.outPk[i].mask, rv.p.rangeSigs[i]); });
|
||||
waiter.wait(&tpool);
|
||||
if (!waiter.wait())
|
||||
return false;
|
||||
|
||||
for (size_t i = 0; i < results.size(); ++i) {
|
||||
if (!results[i]) {
|
||||
|
@ -986,7 +987,7 @@ namespace rct {
|
|||
PERF_TIMER(verRctSemanticsSimple);
|
||||
|
||||
tools::threadpool& tpool = tools::threadpool::getInstance();
|
||||
tools::threadpool::waiter waiter;
|
||||
tools::threadpool::waiter waiter(tpool);
|
||||
std::deque<bool> results;
|
||||
std::vector<const Bulletproof*> proofs;
|
||||
size_t max_non_bp_proofs = 0, offset = 0;
|
||||
|
@ -1060,7 +1061,8 @@ namespace rct {
|
|||
return false;
|
||||
}
|
||||
|
||||
waiter.wait(&tpool);
|
||||
if (!waiter.wait())
|
||||
return false;
|
||||
for (size_t i = 0; i < results.size(); ++i) {
|
||||
if (!results[i]) {
|
||||
LOG_PRINT_L1("Range proof verified failed for proof " << i);
|
||||
|
@ -1108,7 +1110,7 @@ namespace rct {
|
|||
|
||||
std::deque<bool> results(threads);
|
||||
tools::threadpool& tpool = tools::threadpool::getInstance();
|
||||
tools::threadpool::waiter waiter;
|
||||
tools::threadpool::waiter waiter(tpool);
|
||||
|
||||
const keyV &pseudoOuts = bulletproof ? rv.p.pseudoOuts : rv.pseudoOuts;
|
||||
|
||||
|
@ -1121,7 +1123,8 @@ namespace rct {
|
|||
results[i] = verRctMGSimple(message, rv.p.MGs[i], rv.mixRing[i], pseudoOuts[i]);
|
||||
});
|
||||
}
|
||||
waiter.wait(&tpool);
|
||||
if (!waiter.wait())
|
||||
return false;
|
||||
|
||||
for (size_t i = 0; i < results.size(); ++i) {
|
||||
if (!results[i]) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue