Merge "stasis/endpoint: Fix memory leak of channel_ids in ast_endpoint structure." into 16

This commit is contained in:
Friendly Automation 2019-01-14 08:26:53 -06:00 committed by Gerrit Code Review
commit d76896a30b
3 changed files with 30 additions and 0 deletions

View File

@ -2649,6 +2649,18 @@ void ast_channel_internal_swap_uniqueid_and_linkedid(struct ast_channel *a, stru
*/
void ast_channel_internal_swap_topics(struct ast_channel *a, struct ast_channel *b);
/*!
* \brief Swap endpoint_forward and endpoint_cache_forward between two channels
* \param a First channel
* \param b Second channel
* \return void
*
* \note
* This is used in masquerade to exchange endpoint details if one of the two or both
* the channels were created with endpoint
*/
void ast_channel_internal_swap_endpoint_forward_and_endpoint_cache_forward(struct ast_channel *a, struct ast_channel *b);
/*!
* \brief Set uniqueid and linkedid string value only (not time)
* \param chan The channel to set the uniqueid to

View File

@ -6819,6 +6819,12 @@ static void channel_do_masquerade(struct ast_channel *original, struct ast_chann
/* Make sure the Stasis topic on the channel is updated appropriately */
ast_channel_internal_swap_topics(clonechan, original);
/* Swap endpoint forward and endpoint cache forward details of the channels,
* so channel created with endpoint exchanges its state with other channel
* for proper endpoint cleanup.
*/
ast_channel_internal_swap_endpoint_forward_and_endpoint_cache_forward(clonechan, original);
/* Swap channel names. This uses ast_channel_name_set directly, so we
* don't get any spurious rename events.
*/

View File

@ -1388,6 +1388,18 @@ void ast_channel_internal_swap_topics(struct ast_channel *a, struct ast_channel
b->topics = temp;
}
void ast_channel_internal_swap_endpoint_forward_and_endpoint_cache_forward(struct ast_channel *a, struct ast_channel *b)
{
struct stasis_forward *temp;
temp = a->endpoint_forward;
a->endpoint_forward = b->endpoint_forward;
b->endpoint_forward = temp;
temp = a->endpoint_cache_forward;
a->endpoint_cache_forward = b->endpoint_cache_forward;
b->endpoint_cache_forward = temp;
}
void ast_channel_internal_set_fake_ids(struct ast_channel *chan, const char *uniqueid, const char *linkedid)
{
ast_copy_string(chan->uniqueid.unique_id, uniqueid, sizeof(chan->uniqueid.unique_id));