diff options
Diffstat (limited to 'yhttpd/src/thrd')
| -rw-r--r-- | yhttpd/src/thrd/pool.cpp | 157 | ||||
| -rw-r--r-- | yhttpd/src/thrd/pool.h | 55 | ||||
| -rw-r--r-- | yhttpd/src/thrd/thro.cpp | 43 | ||||
| -rw-r--r-- | yhttpd/src/thrd/thro.h | 30 |
4 files changed, 0 insertions, 285 deletions
diff --git a/yhttpd/src/thrd/pool.cpp b/yhttpd/src/thrd/pool.cpp deleted file mode 100644 index dd29d6a..0000000 --- a/yhttpd/src/thrd/pool.cpp +++ /dev/null @@ -1,157 +0,0 @@ -#ifndef POOL_CPP -#define POOL_CPP - -#include "pool.h" - -using namespace std; - -pool::pool() -{ - pthread_mutex_init(&mut_threads, 0); - pthread_mutex_init(&mut_queue_tasks, 0); - pthread_mutex_init(&mut_num_avail_threads, 0); - pthread_cond_init(&cond_new_task, 0); - - i_num_total_threads = 0; - i_num_avail_threads = tool::string2int( wrap::CONF->get_elem( "httpd.thread.initpoolsize" ) ); - increase_pool(i_num_avail_threads); -} - -pool::~pool() -{ - pthread_mutex_lock(&mut_queue_tasks); - while (!queue_tasks.empty()) - { - delete queue_tasks.front(); - queue_tasks.pop(); - } - pthread_mutex_unlock(&mut_queue_tasks); - - pthread_mutex_destroy(&mut_threads); - pthread_mutex_destroy(&mut_queue_tasks); - pthread_mutex_destroy(&mut_num_avail_threads); - pthread_cond_destroy(&cond_new_task); -} - -int -pool::increase_pool(int i_num) -{ - wrap::system_message(POOLFLL + tool::int2string(i_num) +","+tool::int2string(i_num_total_threads)+")"); - int i_max_pool_size = tool::string2int( wrap::CONF->get_elem( "httpd.thread.maxpoolsize" ) ); - - for ( int i = 0; i < i_num; ++i ) - { - if ( i_max_pool_size != 0 && i_num_total_threads >= i_max_pool_size ) - { - wrap::system_message(POOLER2+tool::int2string(i_max_pool_size)+")"); - wrap::system_message(POOLER1+tool::int2string(i)+")"); - return i; - } - - ++i_num_total_threads; - pthread_t p_pthread; - pthread_create(&p_pthread, 0, wait_for_task, (void*) this ); - } - - return i_num; -} - -void -pool::add_task( void(*p_func)(void*), void* p_void ) -{ - pthread_mutex_lock(&mut_queue_tasks); - queue_tasks.push(new task(p_func, p_void)); - pthread_mutex_unlock(&mut_queue_tasks); - - pthread_cond_signal(&cond_new_task); - -} - -void* -pool::wait_for_task( void* p_void ) -{ - pool* p_pool = static_cast<pool*>(p_void); - - for (;;) - { - -#ifdef NCURSES - p_pool->print_pool_size(); -#endif - - pthread_mutex_lock(&p_pool->mut_threads); - pthread_cond_wait(&p_pool->cond_new_task, &p_pool->mut_threads); - - pthread_mutex_lock(&p_pool->mut_num_avail_threads); - if ( --p_pool->i_num_avail_threads < 5 ) - { - int i_size = 9 - p_pool->i_num_avail_threads; - i_size = p_pool->increase_pool(i_size); - p_pool->i_num_avail_threads += i_size; - } - pthread_mutex_unlock(&p_pool->mut_num_avail_threads); - - pthread_mutex_lock(&p_pool->mut_queue_tasks); - task* p_task = p_pool->queue_tasks.front(); - p_pool->queue_tasks.pop(); - pthread_mutex_unlock(&p_pool->mut_queue_tasks); - - pthread_mutex_unlock(&p_pool->mut_threads); - - (*(p_task->p_func))(p_task->p_void); - delete p_task; - - pthread_mutex_lock(&p_pool->mut_num_avail_threads); - p_pool->i_num_avail_threads++; - pthread_mutex_unlock(&p_pool->mut_num_avail_threads); - } - - return 0; -} - -void -pool::run(void* p_void) -{ - add_task(run_func, p_void); -} - -void -pool::run_func(void *p_void) -{ - socketcontainer* p_sock = static_cast<socketcontainer*>(p_void); - wrap::SOCK->read_write(p_sock); -} - -bool -pool::allow_user_login() -{ - pthread_mutex_lock(&mut_num_avail_threads); - if ( i_num_avail_threads < 2 ) - { - int i_max_pool_size = tool::string2int( wrap::CONF->get_elem( "httpd.thread.maxpoolsize" ) ); - if ( i_max_pool_size != 0 && i_max_pool_size == i_num_total_threads ) - { - pthread_mutex_unlock(&mut_num_avail_threads); - return false; - } - } - pthread_mutex_unlock(&mut_num_avail_threads); - - return true; -} - -#ifdef NCURSES -void -pool::print_pool_size() -{ - if ( wrap::NCUR->is_ready() ) - { - pthread_mutex_lock(&mut_num_avail_threads); - mvprintw( NCUR_POOL_WAIT_X,NCUR_POOL_WAIT_Y, "Wait/Tot: %d/%d ", i_num_avail_threads, i_num_total_threads); - mvprintw( NCUR_POOL_RUNNING_X,NCUR_POOL_RUNNING_Y, "Running: %d ", i_num_total_threads-i_num_avail_threads); - pthread_mutex_unlock(&mut_num_avail_threads); - refresh(); - } -} -#endif -#endif diff --git a/yhttpd/src/thrd/pool.h b/yhttpd/src/thrd/pool.h deleted file mode 100644 index 3a5f7b6..0000000 --- a/yhttpd/src/thrd/pool.h +++ /dev/null @@ -1,55 +0,0 @@ -#include "../incl.h" - -#ifndef POOL_H -#define POOL_H - -#include <queue> - -using namespace std; - -class pool -{ -private: - friend class thro; - - struct task - { - void(*p_func)(void*); - void *p_void; - - task(void(*p_func)(void*), void *p_void) - { - this->p_func = p_func; - this->p_void = p_void; - } - }; - - pthread_mutex_t mut_threads; - pthread_mutex_t mut_queue_tasks; - pthread_mutex_t mut_num_avail_threads; - pthread_cond_t cond_new_task; - - int i_num_avail_threads; - int i_num_total_threads; - - queue<task*> queue_tasks; - - int increase_pool(int i_num); - void add_task( void(*p_func)(void*), void* p_void ); - static void* wait_for_task(void *p_void); - static void run_func(void *p_void); - -public: - pool(); - ~pool(); - - void run(void* p_void); - bool allow_user_login(); - -#ifdef NCURSES - - void print_pool_size(); -#endif -}; - -#endif diff --git a/yhttpd/src/thrd/thro.cpp b/yhttpd/src/thrd/thro.cpp deleted file mode 100644 index 8b3f1ba..0000000 --- a/yhttpd/src/thrd/thro.cpp +++ /dev/null @@ -1,43 +0,0 @@ -#ifndef THRO_CPP -#define THRO_CPP - -#include "thro.h" - -using namespace std; - -thro::thro() -{} - -thro::~thro() -{} - -void -thro::run() -{ - void *p_void; - run( p_void ); -} - -void -thro::run( void *p_void ) -{ - elem.p_thro = this; - elem.p_void = p_void; - //wrap::POOL->add_task(start_, &elem); - pthread_create( &pthread, NULL, start_, &elem ); -} - -void* -thro::start_( void *p_void ) -{ - elements *e = (elements*) p_void; - e->p_thro->start( e->p_void ); -} - -void -thro::start( void *p_void ) -{ - wrap::system_message( THRDSTR ); -} - -#endif diff --git a/yhttpd/src/thrd/thro.h b/yhttpd/src/thrd/thro.h deleted file mode 100644 index 8e7e0cf..0000000 --- a/yhttpd/src/thrd/thro.h +++ /dev/null @@ -1,30 +0,0 @@ -#include "../incl.h" - -#ifndef THRO_H -#define THRO_H - -using namespace std; - -class thro -{ -private: - pthread_t pthread; - - struct elements - { - thro *p_thro; - void *p_void; - } - elem; - - static void *start_( void *p_void ); - -public: - thro( ); - ~thro( ); - void run(); - void run( void *p_void ); - virtual void start( void *p_void ); -}; - -#endif |
