mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-04-16 16:58:35 +00:00
mod_rayo: clean up module hashes on shutdown
This commit is contained in:
parent
b0c2c6d67c
commit
e8078d8aef
@ -51,14 +51,15 @@ struct tag_def {
|
|||||||
/**
|
/**
|
||||||
* library configuration
|
* library configuration
|
||||||
*/
|
*/
|
||||||
static struct {
|
typedef struct {
|
||||||
/** true if initialized */
|
/** true if initialized */
|
||||||
switch_bool_t init;
|
switch_bool_t init;
|
||||||
/** Mapping of tag name to definition */
|
/** Mapping of tag name to definition */
|
||||||
switch_hash_t *tag_defs;
|
switch_hash_t *tag_defs;
|
||||||
/** library memory pool */
|
/** library memory pool */
|
||||||
switch_memory_pool_t *pool;
|
switch_memory_pool_t *pool;
|
||||||
} globals;
|
} nlsml_globals;
|
||||||
|
static nlsml_globals globals = { 0 };
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The node in the XML tree
|
* The node in the XML tree
|
||||||
@ -88,6 +89,17 @@ struct nlsml_parser {
|
|||||||
int nomatch;
|
int nomatch;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tag def destructor
|
||||||
|
*/
|
||||||
|
static void destroy_tag_def(void *ptr)
|
||||||
|
{
|
||||||
|
struct tag_def *tag = (struct tag_def *) ptr;
|
||||||
|
if (tag->children_tags) {
|
||||||
|
switch_core_hash_destroy(&tag->children_tags);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a definition for a tag
|
* Add a definition for a tag
|
||||||
* @param tag the name
|
* @param tag the name
|
||||||
@ -114,7 +126,7 @@ static struct tag_def *add_tag_def(const char *tag, tag_attribs_fn attribs_fn, t
|
|||||||
def->attribs_fn = attribs_fn;
|
def->attribs_fn = attribs_fn;
|
||||||
def->cdata_fn = cdata_fn;
|
def->cdata_fn = cdata_fn;
|
||||||
def->is_root = SWITCH_FALSE;
|
def->is_root = SWITCH_FALSE;
|
||||||
switch_core_hash_insert(globals.tag_defs, tag, def);
|
switch_core_hash_insert_destructor(globals.tag_defs, tag, def, destroy_tag_def);
|
||||||
return def;
|
return def;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -467,6 +479,24 @@ int nlsml_init(void)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destruction of NLSML parser environment
|
||||||
|
*/
|
||||||
|
void nlsml_destroy(void)
|
||||||
|
{
|
||||||
|
if (globals.init) {
|
||||||
|
if (globals.tag_defs) {
|
||||||
|
switch_core_hash_destroy(&globals.tag_defs);
|
||||||
|
globals.tag_defs = NULL;
|
||||||
|
}
|
||||||
|
if (globals.pool) {
|
||||||
|
switch_core_destroy_memory_pool(&globals.pool);
|
||||||
|
globals.pool = NULL;
|
||||||
|
}
|
||||||
|
globals.init = SWITCH_FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* For Emacs:
|
/* For Emacs:
|
||||||
* Local Variables:
|
* Local Variables:
|
||||||
* mode:c
|
* mode:c
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* mod_rayo for FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
|
* mod_rayo for FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
|
||||||
* Copyright (C) 2013, Grasshopper
|
* Copyright (C) 2013-2014, Grasshopper
|
||||||
*
|
*
|
||||||
* Version: MPL 1.1
|
* Version: MPL 1.1
|
||||||
*
|
*
|
||||||
@ -40,6 +40,7 @@ enum nlsml_match_type {
|
|||||||
};
|
};
|
||||||
|
|
||||||
extern int nlsml_init(void);
|
extern int nlsml_init(void);
|
||||||
|
extern void nlsml_destroy(void);
|
||||||
enum nlsml_match_type nlsml_parse(const char *result, const char *uuid);
|
enum nlsml_match_type nlsml_parse(const char *result, const char *uuid);
|
||||||
iks *nlsml_normalize(const char *result);
|
iks *nlsml_normalize(const char *result);
|
||||||
extern iks *nlsml_create_dtmf_match(const char *digits, const char *interpretation);
|
extern iks *nlsml_create_dtmf_match(const char *digits, const char *interpretation);
|
||||||
|
@ -248,6 +248,17 @@ done:
|
|||||||
return SWITCH_STATUS_SUCCESS;
|
return SWITCH_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Detector definition destructor
|
||||||
|
*/
|
||||||
|
static void destroy_detector(void *ptr)
|
||||||
|
{
|
||||||
|
struct rayo_cpa_detector *detector = (struct rayo_cpa_detector *) ptr;
|
||||||
|
if (detector->signal_type_map) {
|
||||||
|
switch_core_hash_destroy(&detector->signal_type_map);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Configure CPA
|
* Configure CPA
|
||||||
*/
|
*/
|
||||||
@ -353,7 +364,7 @@ static switch_status_t do_config(switch_memory_pool_t *pool, const char *config_
|
|||||||
/* add signal-type to detector mapping */
|
/* add signal-type to detector mapping */
|
||||||
const char *signal_type_ns = switch_core_sprintf(pool, "%s%s:%s", RAYO_CPA_BASE, signal_type, RAYO_VERSION);
|
const char *signal_type_ns = switch_core_sprintf(pool, "%s%s:%s", RAYO_CPA_BASE, signal_type, RAYO_VERSION);
|
||||||
event_ok = 1;
|
event_ok = 1;
|
||||||
switch_core_hash_insert(globals.detectors, signal_type_ns, detector);
|
switch_core_hash_insert_destructor(globals.detectors, signal_type_ns, detector, destroy_detector);
|
||||||
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Adding CPA %s => %s\n", signal_type_ns, detector->name);
|
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Adding CPA %s => %s\n", signal_type_ns, detector->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -890,9 +890,12 @@ switch_status_t rayo_input_component_load(switch_loadable_module_interface_t **m
|
|||||||
*/
|
*/
|
||||||
switch_status_t rayo_input_component_shutdown(void)
|
switch_status_t rayo_input_component_shutdown(void)
|
||||||
{
|
{
|
||||||
srgs_parser_destroy(globals.parser);
|
|
||||||
switch_event_unbind_callback(on_detected_speech_event);
|
switch_event_unbind_callback(on_detected_speech_event);
|
||||||
|
|
||||||
|
srgs_parser_destroy(globals.parser);
|
||||||
|
srgs_destroy();
|
||||||
|
nlsml_destroy();
|
||||||
|
|
||||||
rayo_cpa_component_shutdown();
|
rayo_cpa_component_shutdown();
|
||||||
|
|
||||||
return SWITCH_STATUS_SUCCESS;
|
return SWITCH_STATUS_SUCCESS;
|
||||||
|
@ -1226,6 +1226,8 @@ switch_status_t rayo_output_component_load(switch_loadable_module_interface_t **
|
|||||||
*/
|
*/
|
||||||
switch_status_t rayo_output_component_shutdown(void)
|
switch_status_t rayo_output_component_shutdown(void)
|
||||||
{
|
{
|
||||||
|
switch_core_hash_destroy(&fileman_globals.hash);
|
||||||
|
|
||||||
return SWITCH_STATUS_SUCCESS;
|
return SWITCH_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,14 +53,15 @@ struct tag_def {
|
|||||||
/**
|
/**
|
||||||
* library configuration
|
* library configuration
|
||||||
*/
|
*/
|
||||||
static struct {
|
typedef struct {
|
||||||
/** true if initialized */
|
/** true if initialized */
|
||||||
switch_bool_t init;
|
switch_bool_t init;
|
||||||
/** Mapping of tag name to definition */
|
/** Mapping of tag name to definition */
|
||||||
switch_hash_t *tag_defs;
|
switch_hash_t *tag_defs;
|
||||||
/** library memory pool */
|
/** library memory pool */
|
||||||
switch_memory_pool_t *pool;
|
switch_memory_pool_t *pool;
|
||||||
} globals;
|
} srgs_globals;
|
||||||
|
static srgs_globals globals = { 0 };
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SRGS node types
|
* SRGS node types
|
||||||
@ -376,6 +377,17 @@ static struct srgs_node *sn_insert_string(switch_memory_pool_t *pool, struct srg
|
|||||||
return child;
|
return child;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tag def destructor
|
||||||
|
*/
|
||||||
|
static void destroy_tag_def(void *ptr)
|
||||||
|
{
|
||||||
|
struct tag_def *tag = (struct tag_def *) ptr;
|
||||||
|
if (tag->children_tags) {
|
||||||
|
switch_core_hash_destroy(&tag->children_tags);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Add a definition for a tag
|
* Add a definition for a tag
|
||||||
* @param tag the name
|
* @param tag the name
|
||||||
@ -402,7 +414,7 @@ static struct tag_def *add_tag_def(const char *tag, tag_attribs_fn attribs_fn, t
|
|||||||
def->attribs_fn = attribs_fn;
|
def->attribs_fn = attribs_fn;
|
||||||
def->cdata_fn = cdata_fn;
|
def->cdata_fn = cdata_fn;
|
||||||
def->is_root = SWITCH_FALSE;
|
def->is_root = SWITCH_FALSE;
|
||||||
switch_core_hash_insert(globals.tag_defs, tag, def);
|
switch_core_hash_insert_destructor(globals.tag_defs, tag, def, destroy_tag_def);
|
||||||
return def;
|
return def;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -871,6 +883,7 @@ void srgs_parser_destroy(struct srgs_parser *parser)
|
|||||||
switch_memory_pool_t *pool = parser->pool;
|
switch_memory_pool_t *pool = parser->pool;
|
||||||
switch_hash_index_t *hi = NULL;
|
switch_hash_index_t *hi = NULL;
|
||||||
|
|
||||||
|
if (parser->cache) {
|
||||||
/* clean up all cached grammars */
|
/* clean up all cached grammars */
|
||||||
for (hi = switch_core_hash_first(parser->cache); hi; hi = switch_core_hash_next(&hi)) {
|
for (hi = switch_core_hash_first(parser->cache); hi; hi = switch_core_hash_next(&hi)) {
|
||||||
struct srgs_grammar *grammar = NULL;
|
struct srgs_grammar *grammar = NULL;
|
||||||
@ -881,6 +894,8 @@ void srgs_parser_destroy(struct srgs_parser *parser)
|
|||||||
switch_assert(grammar);
|
switch_assert(grammar);
|
||||||
srgs_grammar_destroy(grammar);
|
srgs_grammar_destroy(grammar);
|
||||||
}
|
}
|
||||||
|
switch_core_hash_destroy(&parser->cache);
|
||||||
|
}
|
||||||
switch_core_destroy_memory_pool(&pool);
|
switch_core_destroy_memory_pool(&pool);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1629,6 +1644,24 @@ int srgs_init(void)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Destruction of SRGS parser environment
|
||||||
|
*/
|
||||||
|
void srgs_destroy(void)
|
||||||
|
{
|
||||||
|
if (globals.init) {
|
||||||
|
if (globals.tag_defs) {
|
||||||
|
switch_core_hash_destroy(&globals.tag_defs);
|
||||||
|
globals.tag_defs = NULL;
|
||||||
|
}
|
||||||
|
if (globals.pool) {
|
||||||
|
switch_core_destroy_memory_pool(&globals.pool);
|
||||||
|
globals.pool = NULL;
|
||||||
|
}
|
||||||
|
globals.init = SWITCH_FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* For Emacs:
|
/* For Emacs:
|
||||||
* Local Variables:
|
* Local Variables:
|
||||||
* mode:c
|
* mode:c
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* mod_rayo for FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
|
* mod_rayo for FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
|
||||||
* Copyright (C) 2013, Grasshopper
|
* Copyright (C) 2013-2014, Grasshopper
|
||||||
*
|
*
|
||||||
* Version: MPL 1.1
|
* Version: MPL 1.1
|
||||||
*
|
*
|
||||||
@ -46,6 +46,7 @@ enum srgs_match_type {
|
|||||||
};
|
};
|
||||||
|
|
||||||
extern int srgs_init(void);
|
extern int srgs_init(void);
|
||||||
|
extern void srgs_destroy(void);
|
||||||
extern struct srgs_parser *srgs_parser_new(const char *uuid);
|
extern struct srgs_parser *srgs_parser_new(const char *uuid);
|
||||||
extern struct srgs_grammar *srgs_parse(struct srgs_parser *parser, const char *document);
|
extern struct srgs_grammar *srgs_parse(struct srgs_parser *parser, const char *document);
|
||||||
extern const char *srgs_grammar_to_regex(struct srgs_grammar *grammar);
|
extern const char *srgs_grammar_to_regex(struct srgs_grammar *grammar);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user