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
This commit is contained in:
Mark Michelson
2012-06-13 20:59:01 +00:00
parent 89ff2d1ed7
commit a64586e5c2

View File

@@ -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);