mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-02 11:58:40 +00:00
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:
@@ -67,20 +67,6 @@ struct ast_threadpool_listener_callbacks {
|
|||||||
void (*shutdown)(struct ast_threadpool_listener *listener);
|
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 {
|
struct ast_threadpool_options {
|
||||||
#define AST_THREADPOOL_OPTIONS_VERSION 1
|
#define AST_THREADPOOL_OPTIONS_VERSION 1
|
||||||
/*! Version of thradpool options in use */
|
/*! Version of thradpool options in use */
|
||||||
@@ -128,6 +114,8 @@ struct ast_threadpool_options {
|
|||||||
struct ast_threadpool_listener *ast_threadpool_listener_alloc(
|
struct ast_threadpool_listener *ast_threadpool_listener_alloc(
|
||||||
const struct ast_threadpool_listener_callbacks *callbacks, void *user_data);
|
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
|
* \brief Create a new threadpool
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -99,6 +99,20 @@ struct ast_threadpool {
|
|||||||
struct ast_threadpool_options options;
|
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
|
* \brief states for worker threads
|
||||||
*/
|
*/
|
||||||
@@ -823,6 +837,11 @@ struct ast_threadpool_listener *ast_threadpool_listener_alloc(
|
|||||||
return listener;
|
return listener;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void *ast_threadpool_listener_get_user_data(const struct ast_threadpool_listener *listener)
|
||||||
|
{
|
||||||
|
return listener->user_data;
|
||||||
|
}
|
||||||
|
|
||||||
struct pool_options_pair {
|
struct pool_options_pair {
|
||||||
struct ast_threadpool *pool;
|
struct ast_threadpool *pool;
|
||||||
struct ast_threadpool_options options;
|
struct ast_threadpool_options options;
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ static void test_state_changed(struct ast_threadpool *pool,
|
|||||||
int active_threads,
|
int active_threads,
|
||||||
int idle_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);
|
SCOPED_MUTEX(lock, &tld->lock);
|
||||||
tld->num_active = active_threads;
|
tld->num_active = active_threads;
|
||||||
tld->num_idle = idle_threads;
|
tld->num_idle = idle_threads;
|
||||||
@@ -77,7 +77,7 @@ static void test_task_pushed(struct ast_threadpool *pool,
|
|||||||
struct ast_threadpool_listener *listener,
|
struct ast_threadpool_listener *listener,
|
||||||
int was_empty)
|
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);
|
SCOPED_MUTEX(lock, &tld->lock);
|
||||||
tld->task_pushed = 1;
|
tld->task_pushed = 1;
|
||||||
++tld->num_tasks;
|
++tld->num_tasks;
|
||||||
@@ -88,7 +88,7 @@ static void test_task_pushed(struct ast_threadpool *pool,
|
|||||||
static void test_emptied(struct ast_threadpool *pool,
|
static void test_emptied(struct ast_threadpool *pool,
|
||||||
struct ast_threadpool_listener *listener)
|
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);
|
SCOPED_MUTEX(lock, &tld->lock);
|
||||||
tld->empty_notice = 1;
|
tld->empty_notice = 1;
|
||||||
ast_cond_signal(&tld->cond);
|
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)
|
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_cond_destroy(&tld->cond);
|
||||||
ast_mutex_destroy(&tld->lock);
|
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)
|
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 timeval start = ast_tvnow();
|
||||||
struct timespec end = {
|
struct timespec end = {
|
||||||
.tv_sec = start.tv_sec + 5,
|
.tv_sec = start.tv_sec + 5,
|
||||||
@@ -235,7 +235,7 @@ static enum ast_test_result_state listener_check(
|
|||||||
int num_idle,
|
int num_idle,
|
||||||
int empty_notice)
|
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;
|
enum ast_test_result_state res = AST_TEST_PASS;
|
||||||
|
|
||||||
if (tld->task_pushed != task_pushed) {
|
if (tld->task_pushed != task_pushed) {
|
||||||
|
|||||||
Reference in New Issue
Block a user