Summary: | ASTERISK-22042: Set a cause code on a channel when it is ejected from a bridge | ||
Reporter: | Matt Jordan (mjordan) | Labels: | Asterisk12 |
Date Opened: | 2013-07-07 21:15:30 | Date Closed: | 2013-08-22 16:19:03 |
Priority: | Major | Regression? | |
Status: | Closed/Complete | Components: | Core/Bridging |
Versions: | 12 | Frequency of Occurrence | |
Related Issues: | |||
Environment: | Attachments: | ||
Description: | This addresses the following issues in {{main/bridging.c}}:
{noformat} void ast_bridge_change_state_nolock(struct ast_bridge_channel *bridge_channel, enum ast_bridge_channel_state new_state) { /* BUGBUG need cause code for the bridge_channel leaving the bridge. */ if (bridge_channel->state != AST_BRIDGE_CHANNEL_STATE_WAIT) { return; } ast_debug(1, "Setting %p(%s) state from:%d to:%d\n", bridge_channel, ast_channel_name(bridge_channel->chan), bridge_channel->state, new_state); /* Change the state on the bridge channel */ bridge_channel->state = new_state; bridge_channel_poke(bridge_channel); } {noformat} And: {noformat} static void bridge_dissolve(struct ast_bridge *bridge) { struct ast_bridge_channel *bridge_channel; struct ast_frame action = { .frametype = AST_FRAME_BRIDGE_ACTION, .subclass.integer = AST_BRIDGE_ACTION_DEFERRED_DISSOLVING, }; if (bridge->dissolved) { return; } bridge->dissolved = 1; ast_debug(1, "Bridge %s: dissolving bridge\n", bridge->uniqueid); /* BUGBUG need a cause code on the bridge for the later ejected channels. */ AST_LIST_TRAVERSE(&bridge->channels, bridge_channel, entry) { ast_bridge_change_state(bridge_channel, AST_BRIDGE_CHANNEL_STATE_HANGUP); } /* Must defer dissolving bridge because it is already locked. */ ast_bridge_queue_action(bridge, &action); } {noformat} | ||
Comments: |