mirror of https://github.com/Icinga/icinga2.git
Fix a situation where some threadpool work items are never executed.
Fixes #6349
This commit is contained in:
parent
fdc2ef6190
commit
157de9f3bb
|
@ -272,8 +272,9 @@ void ThreadPool::ManagerThreadProc(void)
|
|||
int tthreads = wthreads - alive;
|
||||
|
||||
/* Make sure there is at least one thread per CPU */
|
||||
if (alive + tthreads < std::max(boost::thread::hardware_concurrency(), 4U))
|
||||
tthreads = 1 - alive;
|
||||
int ncput = std::max(boost::thread::hardware_concurrency() / QUEUECOUNT, 1U);
|
||||
if (alive + tthreads < ncput)
|
||||
tthreads = ncput - alive;
|
||||
|
||||
/* Don't kill more than 8 threads at once. */
|
||||
if (tthreads < -8)
|
||||
|
|
|
@ -30,6 +30,8 @@
|
|||
namespace icinga
|
||||
{
|
||||
|
||||
#define QUEUECOUNT 4
|
||||
|
||||
/**
|
||||
* A thread pool.
|
||||
*
|
||||
|
@ -118,7 +120,7 @@ private:
|
|||
boost::condition_variable m_MgmtCV;
|
||||
bool m_Stopped;
|
||||
|
||||
Queue m_Queues[4];
|
||||
Queue m_Queues[QUEUECOUNT];
|
||||
|
||||
void ManagerThreadProc(void);
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue