Make the threadpool listener opaque.
git-svn-id: https://origsvn.digium.com/svn/asterisk/team/mmichelson/threadpool@379126 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
parent
663479a558
commit
967e380ba8
|
@ -67,20 +67,6 @@ struct ast_threadpool_listener_callbacks {
|
|||
void (*shutdown)(struct ast_threadpool_listener *listener);
|
||||
};
|
||||
|
||||
/*!
|
||||
* \brief listener for a threadpool
|
||||
*
|
||||
* The listener is notified of changes in a threadpool. It can
|
||||
* react by doing things like increasing the number of threads
|
||||
* in the pool
|
||||
*/
|
||||
struct ast_threadpool_listener {
|
||||
/*! Callbacks called by the threadpool */
|
||||
const struct ast_threadpool_listener_callbacks *callbacks;
|
||||
/*! User data for the listener */
|
||||
void *user_data;
|
||||
};
|
||||
|
||||
struct ast_threadpool_options {
|
||||
#define AST_THREADPOOL_OPTIONS_VERSION 1
|
||||
/*! Version of thradpool options in use */
|
||||
|
@ -128,6 +114,8 @@ struct ast_threadpool_options {
|
|||
struct ast_threadpool_listener *ast_threadpool_listener_alloc(
|
||||
const struct ast_threadpool_listener_callbacks *callbacks, void *user_data);
|
||||
|
||||
void *ast_threadpool_listener_get_user_data(const struct ast_threadpool_listener *listener);
|
||||
|
||||
/*!
|
||||
* \brief Create a new threadpool
|
||||
*
|
||||
|
|
|
@ -99,6 +99,20 @@ struct ast_threadpool {
|
|||
struct ast_threadpool_options options;
|
||||
};
|
||||
|
||||
/*!
|
||||
* \brief listener for a threadpool
|
||||
*
|
||||
* The listener is notified of changes in a threadpool. It can
|
||||
* react by doing things like increasing the number of threads
|
||||
* in the pool
|
||||
*/
|
||||
struct ast_threadpool_listener {
|
||||
/*! Callbacks called by the threadpool */
|
||||
const struct ast_threadpool_listener_callbacks *callbacks;
|
||||
/*! User data for the listener */
|
||||
void *user_data;
|
||||
};
|
||||
|
||||
/*!
|
||||
* \brief states for worker threads
|
||||
*/
|
||||
|
@ -823,6 +837,11 @@ struct ast_threadpool_listener *ast_threadpool_listener_alloc(
|
|||
return listener;
|
||||
}
|
||||
|
||||
void *ast_threadpool_listener_get_user_data(const struct ast_threadpool_listener *listener)
|
||||
{
|
||||
return listener->user_data;
|
||||
}
|
||||
|
||||
struct pool_options_pair {
|
||||
struct ast_threadpool *pool;
|
||||
struct ast_threadpool_options options;
|
||||
|
|
|
@ -65,7 +65,7 @@ static void test_state_changed(struct ast_threadpool *pool,
|
|||
int active_threads,
|
||||
int idle_threads)
|
||||
{
|
||||
struct test_listener_data *tld = listener->user_data;
|
||||
struct test_listener_data *tld = ast_threadpool_listener_get_user_data(listener);
|
||||
SCOPED_MUTEX(lock, &tld->lock);
|
||||
tld->num_active = active_threads;
|
||||
tld->num_idle = idle_threads;
|
||||
|
@ -77,7 +77,7 @@ static void test_task_pushed(struct ast_threadpool *pool,
|
|||
struct ast_threadpool_listener *listener,
|
||||
int was_empty)
|
||||
{
|
||||
struct test_listener_data *tld = listener->user_data;
|
||||
struct test_listener_data *tld = ast_threadpool_listener_get_user_data(listener);
|
||||
SCOPED_MUTEX(lock, &tld->lock);
|
||||
tld->task_pushed = 1;
|
||||
++tld->num_tasks;
|
||||
|
@ -88,7 +88,7 @@ static void test_task_pushed(struct ast_threadpool *pool,
|
|||
static void test_emptied(struct ast_threadpool *pool,
|
||||
struct ast_threadpool_listener *listener)
|
||||
{
|
||||
struct test_listener_data *tld = listener->user_data;
|
||||
struct test_listener_data *tld = ast_threadpool_listener_get_user_data(listener);
|
||||
SCOPED_MUTEX(lock, &tld->lock);
|
||||
tld->empty_notice = 1;
|
||||
ast_cond_signal(&tld->cond);
|
||||
|
@ -96,7 +96,7 @@ static void test_emptied(struct ast_threadpool *pool,
|
|||
|
||||
static void test_shutdown(struct ast_threadpool_listener *listener)
|
||||
{
|
||||
struct test_listener_data *tld = listener->user_data;
|
||||
struct test_listener_data *tld = ast_threadpool_listener_get_user_data(listener);
|
||||
ast_cond_destroy(&tld->cond);
|
||||
ast_mutex_destroy(&tld->lock);
|
||||
}
|
||||
|
@ -163,7 +163,7 @@ static enum ast_test_result_state wait_until_thread_state(struct ast_test *test,
|
|||
|
||||
static void wait_for_task_pushed(struct ast_threadpool_listener *listener)
|
||||
{
|
||||
struct test_listener_data *tld = listener->user_data;
|
||||
struct test_listener_data *tld = ast_threadpool_listener_get_user_data(listener);
|
||||
struct timeval start = ast_tvnow();
|
||||
struct timespec end = {
|
||||
.tv_sec = start.tv_sec + 5,
|
||||
|
@ -235,7 +235,7 @@ static enum ast_test_result_state listener_check(
|
|||
int num_idle,
|
||||
int empty_notice)
|
||||
{
|
||||
struct test_listener_data *tld = listener->user_data;
|
||||
struct test_listener_data *tld = ast_threadpool_listener_get_user_data(listener);
|
||||
enum ast_test_result_state res = AST_TEST_PASS;
|
||||
|
||||
if (tld->task_pushed != task_pushed) {
|
||||
|
|
Loading…
Reference in New Issue