[asterisk-commits] irroot: branch irroot/distrotech-customers-1.8 r319075 - /team/irroot/distrot...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Mon May 16 05:57:50 CDT 2011


Author: irroot
Date: Mon May 16 05:57:45 2011
New Revision: 319075

URL: http://svnview.digium.com/svn/asterisk?view=rev&rev=319075
Log:
Add another deadlock avoidance

=== Thread ID: -1369711760 (do_monitor           started at [24733] chan_sip.c restart_monitor())
=== ---> Lock #0 (chan_sip.c): MUTEX 24226 handle_request_do &netlock 0xb55466a0 (1)
=== ---> Lock #1 (chan_sip.c): MUTEX 22130 local_attended_transfer transferer 0xa3278f8 (1)
=== ---> Waiting for Lock #2 (channel.c): MUTEX 1361 __ast_queue_frame chan 0xa8b0808 (1)
=== --- ---> Locked Here: channel.c line 6270 (ast_do_masquerade)
=== -------------------------------------------------------------------
===
=== Thread ID: -1378321552 (pbx_thread           started at [ 5042] pbx.c ast_pbx_start())
=== ---> Lock #0 (channel.c): MUTEX 6249 ast_do_masquerade channels 0xb6482388 (1)
=== ---> Lock #1 (channel.c): MUTEX 6246 ast_do_masquerade original 0xa5abc60 (2)
=== ---> Lock #2 (channel.c): MUTEX 6270 ast_do_masquerade clonechan 0xa8b0808 (1)
=== ---> Waiting for Lock #3 (chan_sip.c): MUTEX 6517 sip_indicate p 0xa3278f8 (1)
=== --- ---> Locked Here: chan_sip.c line 22130 (local_attended_transfer)
=== -------------------------------------------------------------------



Modified:
    team/irroot/distrotech-customers-1.8/channels/chan_sip.c

Modified: team/irroot/distrotech-customers-1.8/channels/chan_sip.c
URL: http://svnview.digium.com/svn/asterisk/team/irroot/distrotech-customers-1.8/channels/chan_sip.c?view=diff&rev=319075&r1=319074&r2=319075
==============================================================================
--- team/irroot/distrotech-customers-1.8/channels/chan_sip.c (original)
+++ team/irroot/distrotech-customers-1.8/channels/chan_sip.c Mon May 16 05:57:45 2011
@@ -6582,7 +6582,9 @@
 	struct sip_pvt *p = ast->tech_pvt;
 	int res = 0;
 
-	sip_pvt_lock(p);
+	while (sip_pvt_trylock(p)) {
+		CHANNEL_DEADLOCK_AVOIDANCE(ast);
+	}
 	switch(condition) {
 	case AST_CONTROL_RINGING:
 		if (ast->_state == AST_STATE_RING) {




More information about the asterisk-commits mailing list