From a64586e5c2a7822a3fadb9dac913f56d1866c90c Mon Sep 17 00:00:00 2001 From: Mark Michelson Date: Wed, 13 Jun 2012 20:59:01 +0000 Subject: [PATCH] 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) git-svn-id: https://origsvn.digium.com/svn/asterisk/branches/1.8@368898 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- funcs/func_volume.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/funcs/func_volume.c b/funcs/func_volume.c index 902219d705..310ef8c054 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); -- 2.47.2