diff options
author | Mark Michelson <mmichelson@digium.com> | 2012-06-13 21:17:13 +0000 |
---|---|---|
committer | Mark Michelson <mmichelson@digium.com> | 2012-06-13 21:17:13 +0000 |
commit | 21997aa7bba8e2b2bc6fc6b01f0de4cc8ea56131 (patch) | |
tree | 072637b523a8f24004e123a9ffc0ccff0101997e /funcs | |
parent | ff0b561045201f140449af5601bc2ac5d3ea51a2 (diff) |
Fix a deadlock that occurs when func_volume is used on a local channel.
This was discovered by trying to perform a call forward to an extension
that makes use of func_volume. When the local channel is optimized away,
the datastore on the local;2 channel would have its audiohook destroyed
rather than detaching the audiohook from the channel and then destroying
it.
With this patch, func_volume's datastore destructor takes the proper
route of detaching the audiohook and then destroying it.
(closes issue ASTERISK-19611)
reported by Volker Sauer
Patches:
ASTERISK-19611.patch uploaded by Mark Michelson (license #5049)
........
Merged revisions 368898 from http://svn.asterisk.org/svn/asterisk/branches/1.8
........
Merged revisions 368899 from http://svn.asterisk.org/svn/asterisk/branches/10
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@368900 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'funcs')
-rw-r--r-- | funcs/func_volume.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/funcs/func_volume.c b/funcs/func_volume.c index 39b5a8a08..ce10b5680 100644 --- a/funcs/func_volume.c +++ b/funcs/func_volume.c @@ -90,6 +90,9 @@ static void destroy_callback(void *data) struct volume_information *vi = data; /* Destroy the audiohook, and destroy ourselves */ + ast_audiohook_lock(&vi->audiohook); + ast_audiohook_detach(&vi->audiohook); + ast_audiohook_unlock(&vi->audiohook); ast_audiohook_destroy(&vi->audiohook); ast_free(vi); |