[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