mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-31 18:55:19 +00:00 
			
		
		
		
	bridge_simple.c: Unhold channels on join simple bridge.
Patch provided inline by Yury Kirsanov on the linked issue and approved by Josh Colp. ASTERISK-29253 #close Change-Id: I5b9ccc67ebf06e875ed061d9e7fc21f47b0a4e1f
This commit is contained in:
		
				
					committed by
					
						 Friendly Automation
						Friendly Automation
					
				
			
			
				
	
			
			
			
						parent
						
							d1bfbb65eb
						
					
				
				
					commit
					1937f30202
				
			| @@ -128,6 +128,7 @@ static int simple_bridge_join(struct ast_bridge *bridge, struct ast_bridge_chann | |||||||
| 	struct ast_stream_topology *new_top; | 	struct ast_stream_topology *new_top; | ||||||
| 	struct ast_channel *c0 = AST_LIST_FIRST(&bridge->channels)->chan; | 	struct ast_channel *c0 = AST_LIST_FIRST(&bridge->channels)->chan; | ||||||
| 	struct ast_channel *c1 = AST_LIST_LAST(&bridge->channels)->chan; | 	struct ast_channel *c1 = AST_LIST_LAST(&bridge->channels)->chan; | ||||||
|  | 	int unhold_c0, unhold_c1; | ||||||
|  |  | ||||||
| 	/* | 	/* | ||||||
| 	 * If this is the first channel we can't make it compatible... | 	 * If this is the first channel we can't make it compatible... | ||||||
| @@ -152,9 +153,29 @@ static int simple_bridge_join(struct ast_bridge *bridge, struct ast_bridge_chann | |||||||
| 		SWAP(c0, c1); | 		SWAP(c0, c1); | ||||||
| 	} | 	} | ||||||
| 	new_top = simple_bridge_request_stream_topology_update(existing_top, req_top); | 	new_top = simple_bridge_request_stream_topology_update(existing_top, req_top); | ||||||
|  |  | ||||||
|  | 	/* The ast_channel_hold_state() and ast_channel_name() accessors need to be | ||||||
|  | 	 * called with the associated channel lock held. | ||||||
|  | 	 */ | ||||||
|  | 	if ((unhold_c1 = ast_channel_hold_state(c1) == AST_CONTROL_HOLD)) { | ||||||
|  | 		ast_debug(1, "Channel %s simulating UNHOLD for bridge simple join.\n", ast_channel_name(c1)); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if ((unhold_c0 = ast_channel_hold_state(c0) == AST_CONTROL_HOLD)) { | ||||||
|  | 		ast_debug(1, "Channel %s simulating UNHOLD for bridge simple join.\n", ast_channel_name(c0)); | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	ast_channel_unlock(c0); | 	ast_channel_unlock(c0); | ||||||
| 	ast_channel_unlock(c1); | 	ast_channel_unlock(c1); | ||||||
|  |  | ||||||
|  | 	if (unhold_c1) { | ||||||
|  | 		ast_indicate(c1, AST_CONTROL_UNHOLD); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if (unhold_c0) { | ||||||
|  | 		ast_indicate(c0, AST_CONTROL_UNHOLD); | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	if (!new_top) { | 	if (!new_top) { | ||||||
| 		/* Failure.  We'll just have to live with the current topology. */ | 		/* Failure.  We'll just have to live with the current topology. */ | ||||||
| 		return 0; | 		return 0; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user