Skip to content
Snippets Groups Projects
Commit 03d61704 authored by Mark Michelson's avatar Mark Michelson
Browse files

Add safeguards to ensure we don't improperly access a destroyed taskprocessor.


git-svn-id: https://origsvn.digium.com/svn/asterisk/team/mmichelson/threadpool@377556 65c4cc65-6c06-0410-ace0-fbb531ad65f3
parent 955307ef
No related branches found
No related tags found
No related merge requests found
......@@ -93,6 +93,8 @@ struct ast_threadpool {
* that the threadpool had its state change.
*/
struct ast_taskprocessor *control_tps;
/*! True if the threadpool is in the processof shutting down */
int shutting_down;
};
/*!
......@@ -266,7 +268,10 @@ static void threadpool_zombie_thread_dead(struct ast_threadpool *pool,
*/
static int threadpool_execute(struct ast_threadpool *pool)
{
return ast_taskprocessor_execute(pool->tps);
if (!pool->shutting_down) {
return ast_taskprocessor_execute(pool->tps);
}
return 0;
}
/*!
......@@ -745,7 +750,10 @@ struct ast_threadpool *ast_threadpool_create(struct ast_threadpool_listener *lis
int ast_threadpool_push(struct ast_threadpool *pool, int (*task)(void *data), void *data)
{
return ast_taskprocessor_push(pool->tps, task, data);
if (!pool->shutting_down) {
return ast_taskprocessor_push(pool->tps, task, data);
}
return 0;
}
void ast_threadpool_shutdown(struct ast_threadpool *pool)
......@@ -753,6 +761,7 @@ void ast_threadpool_shutdown(struct ast_threadpool *pool)
/* Shut down the taskprocessors and everything else just
* takes care of itself via the taskprocessor callbacks
*/
ast_atomic_fetchadd_int(&pool->shutting_down, +1);
ast_taskprocessor_unreference(pool->control_tps);
ast_taskprocessor_unreference(pool->tps);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment