ah->rate = rate;
ah->name = switch_core_strdup(ah->memory_pool, module_name);
- return ah->asr_interface->asr_open(ah, codec, rate, dest, flags);
+ status = ah->asr_interface->asr_open(ah, codec, rate, dest, flags);
+
+ if (status != SWITCH_STATUS_SUCCESS) {
+ UNPROTECT_INTERFACE(ah->asr_interface);
+ }
+
+ return status;
+
}
SWITCH_DECLARE(switch_status_t) switch_core_asr_load_grammar(switch_asr_handle_t *ah, const char *grammar, const char *name)
if ((status = sh->speech_interface->speech_open(sh, voice_name, rate, flags)) == SWITCH_STATUS_SUCCESS) {
switch_set_flag(sh, SWITCH_SPEECH_FLAG_OPEN);
+ } else {
+ UNPROTECT_INTERFACE(sh->speech_interface);
}
return status;