diff --git a/lib/base/Makefile.am b/lib/base/Makefile.am index 9301f5f72..6a19ac323 100644 --- a/lib/base/Makefile.am +++ b/lib/base/Makefile.am @@ -50,8 +50,6 @@ libbase_la_SOURCES = \ tcpserver.h \ tcpsocket.cpp \ tcpsocket.h \ - threadpool.cpp \ - threadpool.h \ timer.cpp \ timer.h \ tlsclient.cpp \ diff --git a/lib/base/i2-base.h b/lib/base/i2-base.h index cf0c87212..2f2a1a599 100644 --- a/lib/base/i2-base.h +++ b/lib/base/i2-base.h @@ -189,7 +189,6 @@ namespace tuples = boost::tuples; #include "logger.h" #include "application.h" #include "component.h" -#include "threadpool.h" #include "streamlogger.h" #include "sysloglogger.h" diff --git a/lib/base/threadpool.cpp b/lib/base/threadpool.cpp deleted file mode 100644 index b53f4aa55..000000000 --- a/lib/base/threadpool.cpp +++ /dev/null @@ -1,114 +0,0 @@ -/****************************************************************************** - * Icinga 2 * - * Copyright (C) 2012 Icinga Development Team (http://www.icinga.org/) * - * * - * This program is free software; you can redistribute it and/or * - * modify it under the terms of the GNU General Public License * - * as published by the Free Software Foundation; either version 2 * - * of the License, or (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the Free Software Foundation * - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * - ******************************************************************************/ - -#include "i2-base.h" - -using namespace icinga; - -ThreadPool::ThreadPool(long numThreads) - : m_Alive(true) -{ - for (long i = 0; i < numThreads; i++) - m_Threads.create_thread(boost::bind(&ThreadPool::WorkerThreadProc, this)); -} - -ThreadPool::~ThreadPool(void) -{ - { - boost::mutex::scoped_lock lock(m_Lock); - - m_Tasks.clear(); - - /* notify worker threads to exit */ - m_Alive = false; - m_CV.notify_all(); - } - - m_Threads.join_all(); -} - -void ThreadPool::EnqueueTasks(list& tasks) -{ - { - boost::mutex::scoped_lock lock(m_Lock); - m_Tasks.splice(m_Tasks.end(), tasks, tasks.begin(), tasks.end()); - } - - m_CV.notify_all(); -} - -void ThreadPool::EnqueueTask(const ThreadPoolTask::Ptr& task) -{ - { - boost::mutex::scoped_lock lock(m_Lock); - m_Tasks.push_back(task); - } - - m_CV.notify_one(); -} - - -ThreadPoolTask::Ptr ThreadPool::DequeueTask(void) -{ - boost::mutex::scoped_lock lock(m_Lock); - - while (m_Tasks.empty()) { - if (!m_Alive) - return ThreadPoolTask::Ptr(); - - m_CV.wait(lock); - } - - ThreadPoolTask::Ptr task = m_Tasks.front(); - m_Tasks.pop_front(); - - return task; -} - -void ThreadPool::WaitForTasks(void) -{ - boost::mutex::scoped_lock lock(m_Lock); - - /* wait for all pending tasks */ - while (!m_Tasks.empty()) - m_CV.wait(lock); -} - -void ThreadPool::WorkerThreadProc(void) -{ - while (true) { - ThreadPoolTask::Ptr task = DequeueTask(); - - if (!task) - break; - - task->Execute(); - } -} - -ThreadPool::Ptr ThreadPool::GetDefaultPool(void) -{ - static ThreadPool::Ptr threadPool; - - if (!threadPool) - threadPool = boost::make_shared(); - - return threadPool; -} - diff --git a/lib/base/threadpool.h b/lib/base/threadpool.h deleted file mode 100644 index 7bb3b48c4..000000000 --- a/lib/base/threadpool.h +++ /dev/null @@ -1,64 +0,0 @@ -/****************************************************************************** - * Icinga 2 * - * Copyright (C) 2012 Icinga Development Team (http://www.icinga.org/) * - * * - * This program is free software; you can redistribute it and/or * - * modify it under the terms of the GNU General Public License * - * as published by the Free Software Foundation; either version 2 * - * of the License, or (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the Free Software Foundation * - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * - ******************************************************************************/ - -#ifndef THREADPOOL_H -#define THREADPOOL_H - -namespace icinga -{ - -struct ThreadPoolTask -{ - typedef shared_ptr Ptr; - typedef weak_ptr WeakPtr; - - virtual void Execute(void) = 0; -}; - -class I2_BASE_API ThreadPool : public Object -{ -public: - typedef shared_ptr Ptr; - typedef weak_ptr WeakPtr; - - ThreadPool(long maxThreads = 128); - ~ThreadPool(void); - - static ThreadPool::Ptr GetDefaultPool(void); - - void EnqueueTasks(list& tasks); - void EnqueueTask(const ThreadPoolTask::Ptr& task); - void WaitForTasks(void); - -private: - mutable boost::mutex m_Lock; - condition_variable m_CV; - - list m_Tasks; - - thread_group m_Threads; - bool m_Alive; - - ThreadPoolTask::Ptr DequeueTask(void); - void WorkerThreadProc(void); -}; - -} - -#endif /* THREADPOOL_H */