mirror of
https://github.com/monero-project/monero.git
synced 2024-11-17 08:17:37 +00:00
Merge pull request #6115
27522aaa
core_tests: reset thread pool between tests (moneromooo-monero)
This commit is contained in:
commit
3acb22b889
3 changed files with 29 additions and 7 deletions
|
@ -37,16 +37,14 @@ static __thread bool is_leaf = false;
|
|||
namespace tools
|
||||
{
|
||||
threadpool::threadpool(unsigned int max_threads) : running(true), active(0) {
|
||||
boost::thread::attributes attrs;
|
||||
attrs.set_stack_size(THREAD_STACK_SIZE);
|
||||
max = max_threads ? max_threads : tools::get_max_concurrency();
|
||||
size_t i = max ? max - 1 : 0;
|
||||
while(i--) {
|
||||
threads.push_back(boost::thread(attrs, boost::bind(&threadpool::run, this, false)));
|
||||
}
|
||||
create(max_threads);
|
||||
}
|
||||
|
||||
threadpool::~threadpool() {
|
||||
destroy();
|
||||
}
|
||||
|
||||
void threadpool::destroy() {
|
||||
try
|
||||
{
|
||||
const boost::unique_lock<boost::mutex> lock(mutex);
|
||||
|
@ -64,6 +62,23 @@ threadpool::~threadpool() {
|
|||
try { threads[i].join(); }
|
||||
catch (...) { /* ignore */ }
|
||||
}
|
||||
threads.clear();
|
||||
}
|
||||
|
||||
void threadpool::recycle() {
|
||||
destroy();
|
||||
create(max);
|
||||
}
|
||||
|
||||
void threadpool::create(unsigned int max_threads) {
|
||||
boost::thread::attributes attrs;
|
||||
attrs.set_stack_size(THREAD_STACK_SIZE);
|
||||
max = max_threads ? max_threads : tools::get_max_concurrency();
|
||||
size_t i = max ? max - 1 : 0;
|
||||
running = true;
|
||||
while(i--) {
|
||||
threads.push_back(boost::thread(attrs, boost::bind(&threadpool::run, this, false)));
|
||||
}
|
||||
}
|
||||
|
||||
void threadpool::submit(waiter *obj, std::function<void()> f, bool leaf) {
|
||||
|
|
|
@ -69,12 +69,17 @@ public:
|
|||
// task to finish.
|
||||
void submit(waiter *waiter, std::function<void()> f, bool leaf = false);
|
||||
|
||||
// destroy and recreate threads
|
||||
void recycle();
|
||||
|
||||
unsigned int get_max_concurrency() const;
|
||||
|
||||
~threadpool();
|
||||
|
||||
private:
|
||||
threadpool(unsigned int max_threads = 0);
|
||||
void destroy();
|
||||
void create(unsigned int max_threads);
|
||||
typedef struct entry {
|
||||
waiter *wo;
|
||||
std::function<void()> f;
|
||||
|
|
|
@ -47,6 +47,7 @@
|
|||
#include "include_base_utils.h"
|
||||
#include "common/boost_serialization_helper.h"
|
||||
#include "common/command_line.h"
|
||||
#include "common/threadpool.h"
|
||||
|
||||
#include "cryptonote_basic/account_boost_serialization.h"
|
||||
#include "cryptonote_basic/cryptonote_basic.h"
|
||||
|
@ -775,6 +776,7 @@ inline bool do_replay_events_get_core(std::vector<test_event_entry>& events, cry
|
|||
|
||||
t_test_class validator;
|
||||
bool ret = replay_events_through_core<t_test_class>(c, events, validator);
|
||||
tools::threadpool::getInstance().recycle();
|
||||
// c.deinit();
|
||||
return ret;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue