diff --git a/include/asterisk/taskprocessor.h b/include/asterisk/taskprocessor.h index eb3137c964..a26cf43415 100644 --- a/include/asterisk/taskprocessor.h +++ b/include/asterisk/taskprocessor.h @@ -111,24 +111,8 @@ struct ast_taskprocessor_listener_callbacks { void (*shutdown)(struct ast_taskprocessor_listener *listener); }; -/*! - * \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; -}; +struct ast_taskprocessor *ast_taskprocessor_listener_get_tps(const struct ast_taskprocessor_listener *listener); +void *ast_taskprocessor_listener_get_user_data(const struct ast_taskprocessor_listener *listener); /*! * \brief Allocate a taskprocessor listener diff --git a/main/taskprocessor.c b/main/taskprocessor.c index fae93967ae..0b6a2a817e 100644 --- a/main/taskprocessor.c +++ b/main/taskprocessor.c @@ -78,6 +78,26 @@ struct ast_taskprocessor { /*! Indicates if the taskprocessor is in the process of shuting down */ 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 /*! \brief tps_singletons is the astobj2 container for taskprocessor singletons */ static struct ao2_container *tps_singletons; @@ -473,6 +493,16 @@ struct ast_taskprocessor_listener *ast_taskprocessor_listener_alloc(const struct 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) { struct default_taskprocessor_listener_pvt *pvt; diff --git a/main/threadpool.c b/main/threadpool.c index bdb71dce5a..475a673fd1 100644 --- a/main/threadpool.c +++ b/main/threadpool.c @@ -548,7 +548,7 @@ static int queued_task_pushed(void *data) static void threadpool_tps_task_pushed(struct ast_taskprocessor_listener *listener, 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; SCOPED_AO2LOCK(lock, pool); @@ -588,7 +588,7 @@ static int queued_emptied(void *data) */ 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); 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) { - 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) { pool->listener->callbacks->shutdown(pool->listener); diff --git a/tests/test_taskprocessor.c b/tests/test_taskprocessor.c index c04eeeb36a..c717ad0092 100644 --- a/tests/test_taskprocessor.c +++ b/tests/test_taskprocessor.c @@ -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) { - struct test_listener_pvt *pvt = listener->user_data; + struct test_listener_pvt *pvt = ast_taskprocessor_listener_get_user_data(listener); ++pvt->num_pushed; if (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) { - struct test_listener_pvt *pvt = listener->user_data; + struct test_listener_pvt *pvt = ast_taskprocessor_listener_get_user_data(listener); ++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) { - struct test_listener_pvt *pvt = listener->user_data; + struct test_listener_pvt *pvt = ast_taskprocessor_listener_get_user_data(listener); pvt->shutdown = 1; }