Fix assertion failure in ThreadPool::enqueue()
This commit is contained in:
parent
d57981bac4
commit
e682a8e138
|
@ -36,7 +36,8 @@ ThreadPool::~ThreadPool()
|
|||
void ThreadPool::enqueue(const work_t & t)
|
||||
{
|
||||
auto state(state_.lock());
|
||||
assert(!state->quit);
|
||||
if (state->quit)
|
||||
throw ThreadPoolShutDown("cannot enqueue a work item while the thread pool is shutting down");
|
||||
state->left.push(t);
|
||||
if (state->left.size() > state->workers.size() && state->workers.size() < maxThreads)
|
||||
state->workers.emplace_back(&ThreadPool::workerEntry, this);
|
||||
|
@ -84,7 +85,8 @@ void ThreadPool::workerEntry()
|
|||
} catch (std::exception & e) {
|
||||
auto state(state_.lock());
|
||||
if (state->exception) {
|
||||
if (!dynamic_cast<Interrupted*>(&e))
|
||||
if (!dynamic_cast<Interrupted*>(&e) &&
|
||||
!dynamic_cast<ThreadPoolShutDown*>(&e))
|
||||
printMsg(lvlError, format("error: %s") % e.what());
|
||||
} else {
|
||||
state->exception = std::current_exception();
|
||||
|
|
|
@ -10,6 +10,8 @@
|
|||
|
||||
namespace nix {
|
||||
|
||||
MakeError(ThreadPoolShutDown, Error)
|
||||
|
||||
/* A simple thread pool that executes a queue of work items
|
||||
(lambdas). */
|
||||
class ThreadPool
|
||||
|
|
Loading…
Reference in a new issue