mirror of
				https://github.com/asterisk/asterisk.git
				synced 2025-10-25 06:00:36 +00:00 
			
		
		
		
	Merged revisions 288079-288080 via svnmerge from
https://origsvn.digium.com/svn/asterisk/branches/1.8 ........ r288079 | rmudgett | 2010-09-21 15:29:51 -0500 (Tue, 21 Sep 2010) | 2 lines Protect channel access in CONNECTED_LINE and REDIRECTING interception macro launch code. ........ r288080 | rmudgett | 2010-09-21 15:29:59 -0500 (Tue, 21 Sep 2010) | 8 lines Simplify locking code for REDIRECTING interception macro when forwarding a call. Simplified the locking code by using a local copy of the redirecting party information in app_dial.c:do_forward() and app_queue.c:wait_for_answer() for launching the REDIRECTING interception macro when a call is forwarded. Reduced the lock time of the 'o->chan' and 'in' channels. ........ git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@288081 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
		| @@ -852,6 +852,8 @@ static void do_forward(struct chanlist *o, | ||||
| 		handle_cause(cause, num); | ||||
| 		ast_hangup(original); | ||||
| 	} else { | ||||
| 		struct ast_party_redirecting redirecting; | ||||
|  | ||||
| 		if (single && CAN_EARLY_BRIDGE(peerflags, c, in)) { | ||||
| 			ast_rtp_instance_early_bridge_make_compatible(c, in); | ||||
| 		} | ||||
| @@ -895,22 +897,20 @@ static void do_forward(struct chanlist *o, | ||||
| 		 * deadlock. This is why the handling of c's lock may seem a bit unusual | ||||
| 		 * here. | ||||
| 		 */ | ||||
| 		ast_party_redirecting_init(&redirecting); | ||||
| 		ast_party_redirecting_copy(&redirecting, &c->redirecting); | ||||
| 		ast_channel_unlock(c); | ||||
| 		if (ast_channel_redirecting_macro(c, in, &c->redirecting, 1, 0)) { | ||||
| 			while (ast_channel_trylock(c)) { | ||||
| 				CHANNEL_DEADLOCK_AVOIDANCE(in); | ||||
| 			} | ||||
| 			ast_channel_update_redirecting(in, &c->redirecting, NULL); | ||||
| 			ast_channel_unlock(c); | ||||
| 		if (ast_channel_redirecting_macro(c, in, &redirecting, 1, 0)) { | ||||
| 			ast_channel_update_redirecting(in, &redirecting, NULL); | ||||
| 		} | ||||
| 		ast_party_redirecting_free(&redirecting); | ||||
| 		ast_channel_unlock(in); | ||||
|  | ||||
| 		ast_clear_flag64(peerflags, OPT_IGNORE_CONNECTEDLINE); | ||||
| 		if (ast_test_flag64(peerflags, OPT_CANCEL_TIMEOUT)) { | ||||
| 			*to = -1; | ||||
| 		} | ||||
|  | ||||
| 		ast_channel_unlock(in); | ||||
|  | ||||
| 		if (ast_call(c, stuff, 0)) { | ||||
| 			ast_log(LOG_NOTICE, "Forwarding failed to dial '%s/%s'\n", | ||||
| 				tech, stuff); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user