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
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); 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) * \brief Set uniqueid and linkedid string value only (not time)
* \param chan The channel to set the uniqueid to * \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 */ /* Make sure the Stasis topic on the channel is updated appropriately */
ast_channel_internal_swap_topics(clonechan, original); 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 /* Swap channel names. This uses ast_channel_name_set directly, so we
* don't get any spurious rename events. * 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; 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) 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)); ast_copy_string(chan->uniqueid.unique_id, uniqueid, sizeof(chan->uniqueid.unique_id));