diff --git a/backends/twitter/ThreadPool.cpp b/backends/twitter/ThreadPool.cpp index 0a810e5f6d3daab5aa4142989248a6cbe1dc3e72..a7344dbcb7ec9f5df773adf136da5d9bcc383e61 100644 --- a/backends/twitter/ThreadPool.cpp +++ b/backends/twitter/ThreadPool.cpp @@ -2,16 +2,17 @@ DEFINE_LOGGER(logger, "ThreadPool") boost::signals2::signal< void (Thread*, int) > onWorkCompleted; -void Worker(Thread *t, int wid) +static void Worker(Thread *t, int wid, Swift::EventLoop *loop) { LOG4CXX_INFO(logger, "Starting thread " << wid) t->run(); - onWorkCompleted(t, wid); + loop->postEvent(boost::bind(boost::ref(onWorkCompleted), t, wid), boost::shared_ptr()); } -ThreadPool::ThreadPool(int maxthreads) : MAX_THREADS(maxthreads) +ThreadPool::ThreadPool(Swift::EventLoop *loop, int maxthreads) : MAX_THREADS(maxthreads) { + this->loop = loop; activeThreads = 0; worker = new boost::thread*[MAX_THREADS]; for(int i=0 ; isetThreadID(w); - worker[w] = new boost::thread(Worker, t, w); + worker[w] = new boost::thread(Worker, t, w, loop); updateActiveThreadCount(-1); } criticalregion.unlock(); @@ -112,7 +113,7 @@ void ThreadPool::runAsThread(Thread *t) if((w = getFreeThread()) != -1) { LOG4CXX_INFO(logger, "Creating thread #" << w) t->setThreadID(w); - worker[w] = new boost::thread(Worker, t, w); + worker[w] = new boost::thread(Worker, t, w, loop); updateActiveThreadCount(-1); } else {