[Freeswitch-svn] [commit] r12467 - in freeswitch/trunk/src: . include mod/applications/mod_skel
FreeSWITCH SVN
mrene at freeswitch.org
Thu Mar 5 08:57:26 PST 2009
Author: mrene
Date: Thu Mar 5 10:57:26 2009
New Revision: 12467
Log:
Lets make the parser free its stuff on shutdown, and let the callbacks do something if required
Modified:
freeswitch/trunk/src/include/switch_xml_config.h
freeswitch/trunk/src/mod/applications/mod_skel/mod_skel.c
freeswitch/trunk/src/switch_xml_config.c
Modified: freeswitch/trunk/src/include/switch_xml_config.h
==============================================================================
--- freeswitch/trunk/src/include/switch_xml_config.h (original)
+++ freeswitch/trunk/src/include/switch_xml_config.h Thu Mar 5 10:57:26 2009
@@ -68,7 +68,13 @@
struct switch_xml_config_item;
typedef struct switch_xml_config_item switch_xml_config_item_t;
-typedef switch_status_t (*switch_xml_config_callback_t)(switch_xml_config_item_t *data, switch_bool_t changed);
+typedef enum {
+ CONFIG_LOAD,
+ CONFIG_RELOAD,
+ CONFIG_SHUTDOWN
+} switch_config_callback_type_t;
+
+typedef switch_status_t (*switch_xml_config_callback_t)(switch_xml_config_item_t *data, switch_config_callback_type_t callback_type, switch_bool_t changed);
/*!
* \brief A configuration instruction read by switch_xml_config_parse
@@ -114,6 +120,13 @@
* \param event [out] event (if *event is NOT NULL, the headers will be appended to the existing event)
*/
SWITCH_DECLARE(switch_size_t) switch_event_import_xml(switch_xml_t xml, const char *keyname, const char *valuename, switch_event_t **event);
+
+
+/*!
+ * \brief Free any memory allocated by the configuration
+ * \param instructions instrutions on how to parse the elements
+ */
+SWITCH_DECLARE(void) switch_xml_config_cleanup(switch_xml_config_item_t *instructions);
#endif /* !defined(SWITCH_XML_CONFIG_H) */
/* For Emacs:
Modified: freeswitch/trunk/src/mod/applications/mod_skel/mod_skel.c
==============================================================================
--- freeswitch/trunk/src/mod/applications/mod_skel/mod_skel.c (original)
+++ freeswitch/trunk/src/mod/applications/mod_skel/mod_skel.c Thu Mar 5 10:57:26 2009
@@ -55,14 +55,15 @@
int integer;
} globals;
-static switch_status_t config_callback_siptrace(switch_xml_config_item_t *data, switch_bool_t changed)
+static switch_status_t config_callback_siptrace(switch_xml_config_item_t *data, switch_config_callback_type_t callback_type, switch_bool_t changed)
{
switch_bool_t value = *(switch_bool_t*)data->ptr;
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "In siptrace callback: value %s changed %s\n",
value ? "true" : "false", changed ? "true" : "false");
+
/*
- if (changed) {
+ if ((callback_type == CONFIG_LOG || callback_type == CONFIG_RELOAD) && changed) {
nua_set_params(((sofia_profile_t*)data->functiondata)->nua, TPTAG_LOG(value), TAG_END());
}
*/
@@ -143,6 +144,8 @@
Macro expands to: switch_status_t mod_skel_shutdown() */
SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_skel_shutdown)
{
+ /* Cleanup dynamically allocated config settings */
+ switch_xml_config_cleanup(instructions);
return SWITCH_STATUS_SUCCESS;
}
Modified: freeswitch/trunk/src/switch_xml_config.c
==============================================================================
--- freeswitch/trunk/src/switch_xml_config.c (original)
+++ freeswitch/trunk/src/switch_xml_config.c Thu Mar 5 10:57:26 2009
@@ -273,7 +273,7 @@
}
if (callback) {
- callback(item, changed);
+ callback(item, (reload ? CONFIG_RELOAD : CONFIG_LOAD), changed);
}
}
@@ -299,6 +299,36 @@
return SWITCH_STATUS_SUCCESS;
}
+
+SWITCH_DECLARE(void) switch_xml_config_cleanup(switch_xml_config_item_t *instructions)
+{
+ switch_xml_config_item_t *item;
+
+ for (item = instructions; item->key; item++) {
+ switch_xml_config_callback_t callback = (switch_xml_config_callback_t)item->function;
+
+ switch (item->type) {
+ case SWITCH_CONFIG_STRING:
+ {
+ char **ptr = (char**)item->ptr;
+ switch_xml_config_string_options_t *string_options = (switch_xml_config_string_options_t*)item->data;
+ /* if (using_strdup) */
+ if (string_options && !string_options->pool && !string_options->length) {
+ switch_safe_free(*ptr);
+ }
+ }
+ break;
+ default:
+ break;
+ }
+
+ if (callback) {
+ callback(item, CONFIG_SHUTDOWN, SWITCH_FALSE);
+ }
+
+ }
+}
+
/* For Emacs:
* Local Variables:
* mode:c
More information about the Freeswitch-svn
mailing list