[asterisk-commits] russell: branch 1.6.1 r142066 - in /branches/1.6.1: ./ main/features.c

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Tue Sep 9 10:46:16 CDT 2008


Author: russell
Date: Tue Sep  9 10:46:15 2008
New Revision: 142066

URL: http://svn.digium.com/view/asterisk?view=rev&rev=142066
Log:
Merged revisions 142064 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/trunk

................
r142064 | russell | 2008-09-09 10:44:10 -0500 (Tue, 09 Sep 2008) | 13 lines

Merged revisions 142063 via svnmerge from 
https://origsvn.digium.com/svn/asterisk/branches/1.4

........
r142063 | russell | 2008-09-09 10:40:24 -0500 (Tue, 09 Sep 2008) | 5 lines

Ensure that the stored CDR reference is still valid after the bridge before
poking at it.  Also, keep the channel locked while messing with this CDR.

(fixes crashes reported in issue #13409)

........

................

Modified:
    branches/1.6.1/   (props changed)
    branches/1.6.1/main/features.c

Propchange: branches/1.6.1/
------------------------------------------------------------------------------
Binary property 'trunk-merged' - no diff available.

Modified: branches/1.6.1/main/features.c
URL: http://svn.digium.com/view/asterisk/branches/1.6.1/main/features.c?view=diff&rev=142066&r1=142065&r2=142066
==============================================================================
--- branches/1.6.1/main/features.c (original)
+++ branches/1.6.1/main/features.c Tue Sep  9 10:46:15 2008
@@ -2345,6 +2345,22 @@
 			ast_cdr_specialized_reset(chan->cdr,0);
 		}
 		if (peer->cdr) {
+			struct ast_cdr *cur;
+
+			ast_channel_lock(peer);
+			for (cur = peer->cdr; cur; cur = cur->next) {
+				if (cur == orig_peer_cdr) {
+					break;
+				}
+			}
+
+			if (!cur) {
+				/* orig_peer_cdr is gone, probably because of a masquerade
+				 * during the bridge. */
+				ast_channel_unlock(peer);
+				return res;
+			}
+
 			/* before resetting the peer cdr, throw a copy of it to the 
 			   backend, just in case the cdr.conf file is calling for
 			   unanswered CDR's. */
@@ -2361,6 +2377,7 @@
 				}
 			}
 			ast_cdr_specialized_reset(orig_peer_cdr,0);
+			ast_channel_unlock(peer);
 		}
  	}
 	return res;




More information about the asterisk-commits mailing list