[asterisk-bugs] [JIRA] (ASTERISK-23119) [patch] main/bridging.c sometimes fails to pthread_join the bridge thread
Corey Farrell (JIRA)
noreply at issues.asterisk.org
Thu Jan 9 02:47:03 CST 2014
[ https://issues.asterisk.org/jira/browse/ASTERISK-23119?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=213823#comment-213823 ]
Corey Farrell commented on ASTERISK-23119:
------------------------------------------
>From bridge_channel_join:
{code}
case AST_BRIDGE_CHANNEL_STATE_FEATURE:
bridge_channel_suspend(bridge_channel->bridge, bridge_channel);
ao2_unlock(bridge_channel->bridge);
bridge_channel_feature(bridge_channel->bridge, bridge_channel);
ao2_lock(bridge_channel->bridge);
bridge_channel_unsuspend(bridge_channel->bridge, bridge_channel);
break;
{code}
If the only channel in a bridge get's suspended, this could cause bridge_thread() to return. Without any patch a thread handle is leaked every time a bridge feature (menu option) is used by the only participant. If bridge->thread wasn't cleared then no new thread would be started.
I agree that the usleep loop is a hack, but I think that ending the thread when bridge->array_num==0 is bad.
> [patch] main/bridging.c sometimes fails to pthread_join the bridge thread
> -------------------------------------------------------------------------
>
> Key: ASTERISK-23119
> URL: https://issues.asterisk.org/jira/browse/ASTERISK-23119
> Project: Asterisk
> Issue Type: Bug
> Security Level: None
> Components: Core/Bridging
> Affects Versions: 1.8.26.0, 11.8.0
> Reporter: Corey Farrell
> Attachments: bridging-empty_thread_wait.patch, leak.txt
>
>
> When Hangup is received from the last channel in a ConfBridge conference, bridge_array_remove() sets bridge->array_num to 0. This can cause bridge_thread() to clear bridge->thread before ast_bridge_destroy() is run. When that happens ast_bridge_destroy() doesn't call pthread_join().
> The only ConfBridge setting used was quiet=yes. I used a SIP phone to place a call to ConfBridge, waited a few seconds then hung up from the phone. This causes the issue almost every time with 1.8 and 11 in valgrind. I have not tested 12 since it doesn't use bridge->array_num as a thread exit condition, and doesn't clear bridge->thread.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.asterisk.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the asterisk-bugs
mailing list