Fix assertion failure in ThreadPool::enqueue()
This commit is contained in:
		
							parent
							
								
									d57981bac4
								
							
						
					
					
						commit
						e682a8e138
					
				
					 2 changed files with 6 additions and 2 deletions
				
			
		|  | @ -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…
	
	Add table
		Add a link
		
	
		Reference in a new issue