From: Kevin P. Fleming Date: Wed, 16 Nov 2005 18:11:28 +0000 (+0000) Subject: issue #5770 X-Git-Tag: 1.2.0~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=60ebbb574489df46f707cbd046de5f0c756346ab;p=thirdparty%2Fasterisk.git issue #5770 git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@7117 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- diff --git a/ChangeLog b/ChangeLog index 21074b9f3f..f1e03b1158 100755 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ 2005-11-16 Kevin P. Fleming + * 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) diff --git a/channel.c b/channel.c index 66560fef06..585ed90f62 100755 --- a/channel.c +++ b/channel.c @@ -667,7 +667,11 @@ int ast_queue_frame(struct ast_channel *chan, struct ast_frame *fin) 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); }