X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fthread_pool_observer.cpp;h=a52cd92d2a7a296910d71bb36c315b0877d4fb59;hb=586d78659d671683f33ec55f4a7d32b28e345ccd;hp=d630fd953a5b4cbe2c5661b2861cf04c2a36c1f8;hpb=d3786d00ef2609f57271545410349e3c3c9d10fd;p=metaproxy-moved-to-github.git diff --git a/src/thread_pool_observer.cpp b/src/thread_pool_observer.cpp index d630fd9..a52cd92 100644 --- a/src/thread_pool_observer.cpp +++ b/src/thread_pool_observer.cpp @@ -1,5 +1,5 @@ /* This file is part of Metaproxy. - Copyright (C) 2005-2012 Index Data + Copyright (C) Index Data Metaproxy 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 @@ -166,6 +166,12 @@ void ThreadPoolSocketObserver::socketNotify(int event) } } +void ThreadPoolSocketObserver::get_thread_info(int &tbusy, int &total) +{ + tbusy = m_p->m_no_threads - m_p->m_no_threads_waiting; + total = m_p->m_no_threads; +} + void ThreadPoolSocketObserver::run(void *p) { while(1) @@ -179,9 +185,9 @@ void ThreadPoolSocketObserver::run(void *p) m_p->m_no_threads_waiting--; if (m_p->m_stop_flag) break; - + in = m_p->m_input.front(); - m_p->m_input.pop_front(); + m_p->m_input.pop_front(); m_p->m_cond_input_full.notify_all(); } IThreadPoolMsg *out = in->handle(); @@ -206,14 +212,33 @@ void ThreadPoolSocketObserver::run(void *p) } } +void ThreadPoolSocketObserver::cleanup(IThreadPoolMsg *m, void *info) +{ + boost::mutex::scoped_lock input_lock(m_p->m_mutex_input_data); + + std::deque::iterator it = m_p->m_input.begin(); + while (it != m_p->m_input.end()) + { + if ((*it)->cleanup(info)) + { + delete *it; + it = m_p->m_input.erase(it); + } + else + it++; + } +} + void ThreadPoolSocketObserver::put(IThreadPoolMsg *m) { boost::mutex::scoped_lock input_lock(m_p->m_mutex_input_data); + while (m_p->m_input.size() >= m_p->m_no_threads * queue_size_per_thread) m_p->m_cond_input_full.wait(input_lock); m_p->m_input.push_back(m); m_p->m_cond_input_data.notify_one(); } + /* * Local variables: * c-basic-offset: 4