]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
FS-3077 prevent crash on double call to asr_close
authorChristopher Rienzo <chris@rienzo.net>
Mon, 21 Feb 2011 15:00:35 +0000 (15:00 +0000)
committerChristopher Rienzo <chris@rienzo.net>
Mon, 21 Feb 2011 15:00:35 +0000 (15:00 +0000)
src/mod/asr_tts/mod_unimrcp/mod_unimrcp.c

index d5bac5f7f4bbf6d8411f91cbea4c5e9f4edfd291..8698e4a02cb21c143dd05ec617b43da731bf99f4 100644 (file)
@@ -3155,15 +3155,19 @@ static switch_status_t recog_asr_disable_all_grammars(switch_asr_handle_t *ah)
 static switch_status_t recog_asr_close(switch_asr_handle_t *ah, switch_asr_flag_t *flags)
 {
        speech_channel_t *schannel = (speech_channel_t *) ah->private_info;
-       recognizer_data_t *r = (recognizer_data_t *) schannel->data;
-       speech_channel_stop(schannel);
-       speech_channel_destroy(schannel);
-       switch_core_hash_destroy(&r->grammars);
-       switch_core_hash_destroy(&r->enabled_grammars);
-       if (r->dtmf_generator) {
-               mpf_dtmf_generator_destroy(r->dtmf_generator);
-       }
+       recognizer_data_t *r = NULL;
 
+       /* close if not already closed */
+       if (schannel != NULL && !switch_test_flag(ah, SWITCH_ASR_FLAG_CLOSED)) {
+               r = (recognizer_data_t *) schannel->data;
+               speech_channel_stop(schannel);
+               speech_channel_destroy(schannel);
+               switch_core_hash_destroy(&r->grammars);
+               switch_core_hash_destroy(&r->enabled_grammars);
+               if (r->dtmf_generator) {
+                       mpf_dtmf_generator_destroy(r->dtmf_generator);
+               }
+       }
        /* this lets FreeSWITCH's speech_thread know the handle is closed */
        switch_set_flag(ah, SWITCH_ASR_FLAG_CLOSED);