From 5e19186950b9a4dcac6de00e4a4640072c0aabbe Mon Sep 17 00:00:00 2001 From: Sarang Bharadwaj Date: Sun, 3 Jun 2012 18:03:39 +0530 Subject: [PATCH] Calling finalize in main thread --- backends/twitter/ThreadPool.cpp | 11 ++++++----- backends/twitter/ThreadPool.h | 4 +++- backends/twitter/libtwitcurl/twitcurl.cpp | 2 +- backends/twitter/main.cpp | 2 +- 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/backends/twitter/ThreadPool.cpp b/backends/twitter/ThreadPool.cpp index 0a810e5f..a7344dbc 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 { diff --git a/backends/twitter/ThreadPool.h b/backends/twitter/ThreadPool.h index bd172859..6f498afa 100644 --- a/backends/twitter/ThreadPool.h +++ b/backends/twitter/ThreadPool.h @@ -7,6 +7,7 @@ #include #include #include "transport/logging.h" +#include "Swiften/Swiften.h" /* @@ -54,11 +55,12 @@ class ThreadPool boost::mutex count_lock; boost::mutex pool_lock; boost::mutex criticalregion; + Swift::EventLoop *loop; boost::signals2::signal < void () > onWorkerAvailable; public: - ThreadPool(int maxthreads); + ThreadPool(Swift::EventLoop *loop, int maxthreads); ~ThreadPool(); void runAsThread(Thread *t); int getActiveThreadCount(); diff --git a/backends/twitter/libtwitcurl/twitcurl.cpp b/backends/twitter/libtwitcurl/twitcurl.cpp index e556c9b3..b19e7860 100644 --- a/backends/twitter/libtwitcurl/twitcurl.cpp +++ b/backends/twitter/libtwitcurl/twitcurl.cpp @@ -603,7 +603,7 @@ bool twitCurl::userLookup( std::vector &userInfo, bool isUserId ) { std::string userIds = isUserId?twitCurlDefaults::TWITCURL_USERID : twitCurlDefaults::TWITCURL_SCREENNAME; std::string sep = ""; - for(int i=0 ; ionDataRead.connect(boost::bind(&TwitterPlugin::_handleDataRead, this, _1)); m_conn->connect(Swift::HostAddressPort(Swift::HostAddress(host), port)); - tp = new ThreadPool(10); + tp = new ThreadPool(loop_, 10); LOG4CXX_INFO(logger, "Starting the plugin."); }