Fix deadlock in WorkQueue::Enqueue().

This commit is contained in:
Gunnar Beutner 2013-10-17 09:14:06 +02:00
parent 919af6c539
commit eed901304a
2 changed files with 4 additions and 6 deletions

View File

@ -23,8 +23,8 @@
using namespace icinga; using namespace icinga;
WorkQueue::WorkQueue(size_t maxItems) WorkQueue::WorkQueue(void)
: m_MaxItems(maxItems), m_Executing(false) : m_Executing(false)
{ } { }
WorkQueue::~WorkQueue(void) WorkQueue::~WorkQueue(void)
@ -40,9 +40,6 @@ void WorkQueue::Enqueue(const WorkCallback& item)
{ {
boost::mutex::scoped_lock lock(m_Mutex); boost::mutex::scoped_lock lock(m_Mutex);
while (m_Items.size() >= m_MaxItems)
m_CV.wait(lock);
m_Items.push_back(item); m_Items.push_back(item);
m_CV.notify_all(); m_CV.notify_all();
@ -87,4 +84,5 @@ void WorkQueue::ExecuteItem(void)
} }
m_Executing = false; m_Executing = false;
m_CV.notify_all();
} }

View File

@ -39,7 +39,7 @@ class I2_BASE_API WorkQueue
public: public:
typedef boost::function<void (void)> WorkCallback; typedef boost::function<void (void)> WorkCallback;
WorkQueue(size_t maxItems = 25000); WorkQueue(void);
~WorkQueue(void); ~WorkQueue(void);
void Enqueue(const WorkCallback& item); void Enqueue(const WorkCallback& item);