mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-22 12:52:33 +00:00
res_parking: Fix some simple bugs
Both of them are covered in the dynamic parking review on https://reviewboard.asterisk.org/r/2550 - Remove unref against parking lot that the bridge did on dissolve since the reference wasn't taken in the first place. On a swap, reapply bridge roles in order to get music on hold and such playing on the channel that swaps into the bridge. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@389618 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -56,15 +56,7 @@ static void bridge_parking_destroy(struct ast_bridge_parking *self)
|
|||||||
|
|
||||||
static void bridge_parking_dissolving(struct ast_bridge_parking *self)
|
static void bridge_parking_dissolving(struct ast_bridge_parking *self)
|
||||||
{
|
{
|
||||||
struct parking_lot *lot = self->lot;
|
|
||||||
|
|
||||||
/* Unlink the parking bridge from the parking lot that owns it */
|
|
||||||
lot->parking_bridge = NULL;
|
|
||||||
ao2_ref(lot, -1);
|
|
||||||
|
|
||||||
/* Disassociate the bridge from the parking lot as well. */
|
|
||||||
self->lot = NULL;
|
self->lot = NULL;
|
||||||
|
|
||||||
ast_bridge_base_v_table.dissolving(&self->base);
|
ast_bridge_base_v_table.dissolving(&self->base);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -200,6 +192,8 @@ static int bridge_parking_push(struct ast_bridge_parking *self, struct ast_bridg
|
|||||||
|
|
||||||
ast_bridge_base_v_table.push(&self->base, bridge_channel, swap);
|
ast_bridge_base_v_table.push(&self->base, bridge_channel, swap);
|
||||||
|
|
||||||
|
ast_assert(self->lot != NULL);
|
||||||
|
|
||||||
/* Answer the channel if needed */
|
/* Answer the channel if needed */
|
||||||
if (ast_channel_state(bridge_channel->chan) != AST_STATE_UP) {
|
if (ast_channel_state(bridge_channel->chan) != AST_STATE_UP) {
|
||||||
ast_answer(bridge_channel->chan);
|
ast_answer(bridge_channel->chan);
|
||||||
@@ -227,6 +221,12 @@ static int bridge_parking_push(struct ast_bridge_parking *self, struct ast_bridg
|
|||||||
|
|
||||||
parking_set_duration(bridge_channel->features, pu);
|
parking_set_duration(bridge_channel->features, pu);
|
||||||
|
|
||||||
|
/* BUGBUG Adding back local channel swapping made us not hear music on hold for the channel that got swapped
|
||||||
|
* into the parking lot. Setting the roels back up gets around that, but we still need to deal with the ringing option
|
||||||
|
* to the park application here somehow.
|
||||||
|
*/
|
||||||
|
parking_channel_set_roles(bridge_channel->chan, self->lot, 0);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user