mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-05 12:16:00 +00:00
Make ast_taskprocessor_listener opaque.
git-svn-id: https://origsvn.digium.com/svn/asterisk/team/mmichelson/threadpool@379125 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -111,24 +111,8 @@ struct ast_taskprocessor_listener_callbacks {
|
|||||||
void (*shutdown)(struct ast_taskprocessor_listener *listener);
|
void (*shutdown)(struct ast_taskprocessor_listener *listener);
|
||||||
};
|
};
|
||||||
|
|
||||||
/*!
|
struct ast_taskprocessor *ast_taskprocessor_listener_get_tps(const struct ast_taskprocessor_listener *listener);
|
||||||
* \brief A listener for taskprocessors
|
void *ast_taskprocessor_listener_get_user_data(const struct ast_taskprocessor_listener *listener);
|
||||||
*
|
|
||||||
* \since 12.0.0
|
|
||||||
*
|
|
||||||
* When a taskprocessor's state changes, the listener
|
|
||||||
* is notified of the change. This allows for tasks
|
|
||||||
* to be addressed in whatever way is appropriate for
|
|
||||||
* the module using the taskprocessor.
|
|
||||||
*/
|
|
||||||
struct ast_taskprocessor_listener {
|
|
||||||
/*! The callbacks the taskprocessor calls into to notify of state changes */
|
|
||||||
const struct ast_taskprocessor_listener_callbacks *callbacks;
|
|
||||||
/*! The taskprocessor that the listener is listening to */
|
|
||||||
struct ast_taskprocessor *tps;
|
|
||||||
/*! Data private to the listener */
|
|
||||||
void *user_data;
|
|
||||||
};
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Allocate a taskprocessor listener
|
* \brief Allocate a taskprocessor listener
|
||||||
|
@@ -78,6 +78,26 @@ struct ast_taskprocessor {
|
|||||||
/*! Indicates if the taskprocessor is in the process of shuting down */
|
/*! Indicates if the taskprocessor is in the process of shuting down */
|
||||||
unsigned int shutting_down:1;
|
unsigned int shutting_down:1;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* \brief A listener for taskprocessors
|
||||||
|
*
|
||||||
|
* \since 12.0.0
|
||||||
|
*
|
||||||
|
* When a taskprocessor's state changes, the listener
|
||||||
|
* is notified of the change. This allows for tasks
|
||||||
|
* to be addressed in whatever way is appropriate for
|
||||||
|
* the module using the taskprocessor.
|
||||||
|
*/
|
||||||
|
struct ast_taskprocessor_listener {
|
||||||
|
/*! The callbacks the taskprocessor calls into to notify of state changes */
|
||||||
|
const struct ast_taskprocessor_listener_callbacks *callbacks;
|
||||||
|
/*! The taskprocessor that the listener is listening to */
|
||||||
|
struct ast_taskprocessor *tps;
|
||||||
|
/*! Data private to the listener */
|
||||||
|
void *user_data;
|
||||||
|
};
|
||||||
|
|
||||||
#define TPS_MAX_BUCKETS 7
|
#define TPS_MAX_BUCKETS 7
|
||||||
/*! \brief tps_singletons is the astobj2 container for taskprocessor singletons */
|
/*! \brief tps_singletons is the astobj2 container for taskprocessor singletons */
|
||||||
static struct ao2_container *tps_singletons;
|
static struct ao2_container *tps_singletons;
|
||||||
@@ -473,6 +493,16 @@ struct ast_taskprocessor_listener *ast_taskprocessor_listener_alloc(const struct
|
|||||||
return listener;
|
return listener;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct ast_taskprocessor *ast_taskprocessor_listener_get_tps(const struct ast_taskprocessor_listener *listener)
|
||||||
|
{
|
||||||
|
return listener->tps;
|
||||||
|
}
|
||||||
|
|
||||||
|
void *ast_taskprocessor_listener_get_user_data(const struct ast_taskprocessor_listener *listener)
|
||||||
|
{
|
||||||
|
return listener->user_data;
|
||||||
|
}
|
||||||
|
|
||||||
static void *default_listener_pvt_alloc(void)
|
static void *default_listener_pvt_alloc(void)
|
||||||
{
|
{
|
||||||
struct default_taskprocessor_listener_pvt *pvt;
|
struct default_taskprocessor_listener_pvt *pvt;
|
||||||
|
@@ -548,7 +548,7 @@ static int queued_task_pushed(void *data)
|
|||||||
static void threadpool_tps_task_pushed(struct ast_taskprocessor_listener *listener,
|
static void threadpool_tps_task_pushed(struct ast_taskprocessor_listener *listener,
|
||||||
int was_empty)
|
int was_empty)
|
||||||
{
|
{
|
||||||
struct ast_threadpool *pool = listener->user_data;
|
struct ast_threadpool *pool = ast_taskprocessor_listener_get_user_data(listener);
|
||||||
struct task_pushed_data *tpd;
|
struct task_pushed_data *tpd;
|
||||||
SCOPED_AO2LOCK(lock, pool);
|
SCOPED_AO2LOCK(lock, pool);
|
||||||
|
|
||||||
@@ -588,7 +588,7 @@ static int queued_emptied(void *data)
|
|||||||
*/
|
*/
|
||||||
static void threadpool_tps_emptied(struct ast_taskprocessor_listener *listener)
|
static void threadpool_tps_emptied(struct ast_taskprocessor_listener *listener)
|
||||||
{
|
{
|
||||||
struct ast_threadpool *pool = listener->user_data;
|
struct ast_threadpool *pool = ast_taskprocessor_listener_get_user_data(listener);
|
||||||
SCOPED_AO2LOCK(lock, pool);
|
SCOPED_AO2LOCK(lock, pool);
|
||||||
|
|
||||||
if (pool->shutting_down) {
|
if (pool->shutting_down) {
|
||||||
@@ -611,7 +611,7 @@ static void threadpool_tps_emptied(struct ast_taskprocessor_listener *listener)
|
|||||||
*/
|
*/
|
||||||
static void threadpool_tps_shutdown(struct ast_taskprocessor_listener *listener)
|
static void threadpool_tps_shutdown(struct ast_taskprocessor_listener *listener)
|
||||||
{
|
{
|
||||||
struct ast_threadpool *pool = listener->user_data;
|
struct ast_threadpool *pool = ast_taskprocessor_listener_get_user_data(listener);
|
||||||
|
|
||||||
if (pool->listener && pool->listener->callbacks->shutdown) {
|
if (pool->listener && pool->listener->callbacks->shutdown) {
|
||||||
pool->listener->callbacks->shutdown(pool->listener);
|
pool->listener->callbacks->shutdown(pool->listener);
|
||||||
|
@@ -283,7 +283,7 @@ static int test_start(struct ast_taskprocessor_listener *listener)
|
|||||||
*/
|
*/
|
||||||
static void test_task_pushed(struct ast_taskprocessor_listener *listener, int was_empty)
|
static void test_task_pushed(struct ast_taskprocessor_listener *listener, int was_empty)
|
||||||
{
|
{
|
||||||
struct test_listener_pvt *pvt = listener->user_data;
|
struct test_listener_pvt *pvt = ast_taskprocessor_listener_get_user_data(listener);
|
||||||
++pvt->num_pushed;
|
++pvt->num_pushed;
|
||||||
if (was_empty) {
|
if (was_empty) {
|
||||||
++pvt->num_was_empty;
|
++pvt->num_was_empty;
|
||||||
@@ -295,7 +295,7 @@ static void test_task_pushed(struct ast_taskprocessor_listener *listener, int wa
|
|||||||
*/
|
*/
|
||||||
static void test_emptied(struct ast_taskprocessor_listener *listener)
|
static void test_emptied(struct ast_taskprocessor_listener *listener)
|
||||||
{
|
{
|
||||||
struct test_listener_pvt *pvt = listener->user_data;
|
struct test_listener_pvt *pvt = ast_taskprocessor_listener_get_user_data(listener);
|
||||||
++pvt->num_emptied;
|
++pvt->num_emptied;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -304,7 +304,7 @@ static void test_emptied(struct ast_taskprocessor_listener *listener)
|
|||||||
*/
|
*/
|
||||||
static void test_shutdown(struct ast_taskprocessor_listener *listener)
|
static void test_shutdown(struct ast_taskprocessor_listener *listener)
|
||||||
{
|
{
|
||||||
struct test_listener_pvt *pvt = listener->user_data;
|
struct test_listener_pvt *pvt = ast_taskprocessor_listener_get_user_data(listener);
|
||||||
pvt->shutdown = 1;
|
pvt->shutdown = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user