Always detach and destroy the whisper and barge audiohooks. Additionally also allow...
authorJoshua Colp <jcolp@digium.com>
Fri, 6 Feb 2009 15:59:17 +0000 (15:59 +0000)
committerJoshua Colp <jcolp@digium.com>
Fri, 6 Feb 2009 15:59:17 +0000 (15:59 +0000)
(closes issue #14414)
Reported by: bluecrow76

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@173902 65c4cc65-6c06-0410-ace0-fbb531ad65f3

apps/app_chanspy.c
main/audiohook.c

index f537875..43c95c4 100644 (file)
@@ -611,19 +611,15 @@ static int channel_spy(struct ast_channel *chan, struct chanspy_ds *spyee_chansp
        ast_clear_flag(chan, AST_FLAG_END_DTMF_ONLY);
        ast_channel_unlock(chan);
 
-       if (ast_test_flag(flags, OPTION_WHISPER)) {
-               ast_audiohook_lock(&csth.whisper_audiohook);
-               ast_audiohook_detach(&csth.whisper_audiohook);
-               ast_audiohook_unlock(&csth.whisper_audiohook);
-               ast_audiohook_destroy(&csth.whisper_audiohook);
-       }
-
-       if (ast_test_flag(flags, OPTION_BARGE)) {
-               ast_audiohook_lock(&csth.bridge_whisper_audiohook);
-               ast_audiohook_detach(&csth.bridge_whisper_audiohook);
-               ast_audiohook_unlock(&csth.bridge_whisper_audiohook);
-               ast_audiohook_destroy(&csth.bridge_whisper_audiohook);
-       }
+       ast_audiohook_lock(&csth.whisper_audiohook);
+       ast_audiohook_detach(&csth.whisper_audiohook);
+       ast_audiohook_unlock(&csth.whisper_audiohook);
+       ast_audiohook_destroy(&csth.whisper_audiohook);
+       
+       ast_audiohook_lock(&csth.bridge_whisper_audiohook);
+       ast_audiohook_detach(&csth.bridge_whisper_audiohook);
+       ast_audiohook_unlock(&csth.bridge_whisper_audiohook);
+       ast_audiohook_destroy(&csth.bridge_whisper_audiohook);
 
        ast_audiohook_lock(&csth.spy_audiohook);
        ast_audiohook_detach(&csth.spy_audiohook);
index 262d5d4..2b0beac 100644 (file)
@@ -354,7 +354,7 @@ int ast_audiohook_attach(struct ast_channel *chan, struct ast_audiohook *audioho
  */
 int ast_audiohook_detach(struct ast_audiohook *audiohook)
 {
-       if (audiohook->status == AST_AUDIOHOOK_STATUS_DONE)
+       if (audiohook->status == AST_AUDIOHOOK_STATUS_NEW || audiohook->status == AST_AUDIOHOOK_STATUS_DONE)
                return 0;
 
        audiohook->status = AST_AUDIOHOOK_STATUS_SHUTDOWN;