]> git.ipfire.org Git - thirdparty/freeswitch.git/commitdiff
MERGE: Bugfix: Destroy schannel only *after* cleanup of its contents is done
authorLuke Dashjr <luke@openmethods.com>
Thu, 17 Mar 2011 20:32:47 +0000 (15:32 -0500)
committerLuke Dashjr <luke@openmethods.com>
Thu, 17 Mar 2011 20:32:47 +0000 (15:32 -0500)
1  2 
src/mod/asr_tts/mod_unimrcp/mod_unimrcp.c

index 8698e4a02cb21c143dd05ec617b43da731bf99f4,63264a004906bfd173a5707ddf9d774ffae03a9d..ed34f34989101f3e8af1db9f1378b60583e2a862
@@@ -3155,19 -3118,15 +3155,19 @@@ static switch_status_t recog_asr_disabl
  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);
 -      switch_core_hash_destroy(&r->grammars);
 -      switch_core_hash_destroy(&r->enabled_grammars);
 -      if (r->dtmf_generator) {
 -              mpf_dtmf_generator_destroy(r->dtmf_generator);
 -      }
 -      speech_channel_destroy(schannel);
 +      recognizer_data_t *r = NULL;
  
-               speech_channel_destroy(schannel);
 +      /* 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);
 +              switch_core_hash_destroy(&r->grammars);
 +              switch_core_hash_destroy(&r->enabled_grammars);
 +              if (r->dtmf_generator) {
 +                      mpf_dtmf_generator_destroy(r->dtmf_generator);
 +              }
++              speech_channel_destroy(schannel);
 +      }
        /* this lets FreeSWITCH's speech_thread know the handle is closed */
        switch_set_flag(ah, SWITCH_ASR_FLAG_CLOSED);