mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-02 19:16:15 +00:00
autoservice: Do not sleep if autoservice_stop is called within autoservice thread
It's possible that ast_autoservice_stop is called within the autoservice thread. In this case the autoservice thread is stuck in an endless sleep. To avoid endless sleep ast_autoservice_stop must check that it's not called within the autoservice thread. Fixes: #763
This commit is contained in:
committed by
asterisk-org-access-app[bot]
parent
2f5b143b08
commit
c49b766f06
@@ -309,9 +309,16 @@ int ast_autoservice_stop(struct ast_channel *chan)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Wait while autoservice thread rebuilds its list. */
|
||||
while (chan_list_state == as_chan_list_state) {
|
||||
usleep(1000);
|
||||
if (asthread != AST_PTHREADT_NULL && pthread_equal(pthread_self(), asthread)) {
|
||||
/* Do not sleep if ast_autoservice_stop is called within the autoservice thread,
|
||||
otherwise the thread will be stuck in an endless sleep. */
|
||||
ast_debug(1, "ast_autoservice_stop is called within the autoservice thread, channel %s\n",
|
||||
ast_channel_name(chan));
|
||||
} else {
|
||||
/* Wait while autoservice thread rebuilds its list. */
|
||||
while (chan_list_state == as_chan_list_state) {
|
||||
usleep(1000);
|
||||
}
|
||||
}
|
||||
|
||||
/* Now autoservice thread should have no references to our entry
|
||||
|
Reference in New Issue
Block a user