mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-11-03 20:38:59 +00:00 
			
		
		
		
	Fix incorrect calls to ast_bridge_impart().
There was a misunderstanding about ast_bridge_impart()'s handling of the imparted channel's reference. The channel reference is passed by the caller unless ast_bridge_impart() returns an error. * Fixed a memory leak in conf_announce_channel_push() if the impart failed. git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@392934 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
		@@ -172,8 +172,8 @@ void conf_announce_channel_depart(struct ast_channel *chan)
 | 
			
		||||
int conf_announce_channel_push(struct ast_channel *ast)
 | 
			
		||||
{
 | 
			
		||||
	struct ast_bridge_features *features;
 | 
			
		||||
	struct ast_channel *chan;
 | 
			
		||||
	RAII_VAR(struct announce_pvt *, p, NULL, ao2_cleanup);
 | 
			
		||||
	RAII_VAR(struct ast_channel *, chan, NULL, ast_channel_unref);
 | 
			
		||||
 | 
			
		||||
	{
 | 
			
		||||
		SCOPED_CHANNELLOCK(lock, ast);
 | 
			
		||||
@@ -192,12 +192,15 @@ int conf_announce_channel_push(struct ast_channel *ast)
 | 
			
		||||
 | 
			
		||||
	features = ast_bridge_features_new();
 | 
			
		||||
	if (!features) {
 | 
			
		||||
		ast_channel_unref(chan);
 | 
			
		||||
		return -1;
 | 
			
		||||
	}
 | 
			
		||||
	ast_set_flag(&features->feature_flags, AST_BRIDGE_CHANNEL_FLAG_IMMOVABLE);
 | 
			
		||||
 | 
			
		||||
	/* Impart the output channel into the bridge */
 | 
			
		||||
	if (ast_bridge_impart(p->bridge, chan, NULL, features, 0)) {
 | 
			
		||||
		ast_bridge_features_destroy(features);
 | 
			
		||||
		ast_channel_unref(chan);
 | 
			
		||||
		return -1;
 | 
			
		||||
	}
 | 
			
		||||
	ao2_lock(p);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user