[Asterisk-cvs] asterisk ChangeLog, 1.138, 1.139 channel.c, 1.259, 1.260

kpfleming kpfleming
Wed Nov 16 13:21:32 CST 2005


Update of /usr/cvsroot/asterisk
In directory mongoose.digium.com:/tmp/cvs-serv6757

Modified Files:
	ChangeLog channel.c 
Log Message:
issue #5770


Index: ChangeLog
===================================================================
RCS file: /usr/cvsroot/asterisk/ChangeLog,v
retrieving revision 1.138
retrieving revision 1.139
diff -u -d -r1.138 -r1.139
--- ChangeLog	16 Nov 2005 17:48:18 -0000	1.138
+++ ChangeLog	16 Nov 2005 18:11:28 -0000	1.139
@@ -1,5 +1,7 @@
 2005-11-16  Kevin P. Fleming  <kpfleming at limerick.digium.com>
 
+	* channel.c (ast_queue_hangup): ensure that the channel lock is held before changing its fields... (issue #5770)
+
 	* res/res_musiconhold.c: don't spit out incorrect log messages (and leak memory) during reload (issue #5766)
 
 	* channels/chan_sip.c (process_sdp): don't pass video codec number into ast_getformatname(), it is not valid input for that function (issue #5764)

Index: channel.c
===================================================================
RCS file: /usr/cvsroot/asterisk/channel.c,v
retrieving revision 1.259
retrieving revision 1.260
diff -u -d -r1.259 -r1.260
--- channel.c	11 Nov 2005 03:48:28 -0000	1.259
+++ channel.c	16 Nov 2005 18:11:28 -0000	1.260
@@ -667,7 +667,11 @@
 int ast_queue_hangup(struct ast_channel *chan)
 {
 	struct ast_frame f = { AST_FRAME_CONTROL, AST_CONTROL_HANGUP };
-	chan->_softhangup |= AST_SOFTHANGUP_DEV;
+	/* Yeah, let's not change a lock-critical value without locking */
+	if (!ast_mutex_trylock(&chan->lock)) {
+		chan->_softhangup |= AST_SOFTHANGUP_DEV;
+		ast_mutex_unlock(&chan->lock);
+	}
 	return ast_queue_frame(chan, &f);
 }
 




More information about the svn-commits mailing list