From 5e19186950b9a4dcac6de00e4a4640072c0aabbe 2012-06-03 14:33:39 From: Sarang Bharadwaj Date: 2012-06-03 14:33:39 Subject: [PATCH] Calling finalize in main thread --- 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 { diff --git a/backends/twitter/ThreadPool.h b/backends/twitter/ThreadPool.h index bd1728597169de6f33071b13e3d0a5b713cab1f6..6f498afaa1e5019f9a0b1d50c8b095962c0fbe20 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 e556c9b35e378e36aece3890e68464db46339577..b19e7860c95bf9674a659cc4b09ea180aef64a23 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."); }