diff options
author | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-11-16 18:11:28 +0000 |
---|---|---|
committer | kpfleming <kpfleming@f38db490-d61c-443f-a65b-d21fe96a405b> | 2005-11-16 18:11:28 +0000 |
commit | d3df1fc9b26ea738af4767b5db362c99d4115f98 (patch) | |
tree | f2f6e3a495527cb2687a2ce91dc7b37bea28de26 | |
parent | 5f6ab90eb2239b9b76083fbeebbf6bf0c644ab07 (diff) |
issue #5770
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@7117 f38db490-d61c-443f-a65b-d21fe96a405b
-rwxr-xr-x | ChangeLog | 2 | ||||
-rwxr-xr-x | channel.c | 6 |
2 files changed, 7 insertions, 1 deletions
@@ -1,5 +1,7 @@ 2005-11-16 Kevin P. Fleming <kpfleming@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) @@ -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); } |