Mercurial > hg > freeDiameter
changeset 447:097bae83b07a
Forgot to cleanup the configuration on exit, spotted by valgrind
author | Sebastien Decugis <sdecugis@nict.go.jp> |
---|---|
date | Thu, 29 Jul 2010 11:36:40 +0900 |
parents | 66f58cecf3cd |
children | 9493b8d8a35f |
files | freeDiameter/apps.c freeDiameter/config.c freeDiameter/fD.h freeDiameter/main.c include/freeDiameter/freeDiameter.h |
diffstat | 5 files changed, 55 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/freeDiameter/apps.c Thu Jul 29 10:38:39 2010 +0900 +++ b/freeDiameter/apps.c Thu Jul 29 11:36:40 2010 +0900 @@ -135,3 +135,18 @@ *common_found = 0; return 0; } + +/* Remove the apps from a list */ +int fd_app_empty(struct fd_list * list) +{ + TRACE_ENTRY("%p", list); + CHECK_PARAMS( list ); + + while (!FD_IS_LIST_EMPTY(list)) { + struct fd_list * li = list->next; + fd_list_unlink(li); + free(li); + } + + return 0; +}
--- a/freeDiameter/config.c Thu Jul 29 10:38:39 2010 +0900 +++ b/freeDiameter/config.c Thu Jul 29 11:36:40 2010 +0900 @@ -270,3 +270,39 @@ return 0; } + + +/* Destroy contents of fd_g_config structure */ +int fd_conf_deinit() +{ + TRACE_ENTRY(); + + /* Free the TLS parameters */ + gnutls_priority_deinit(fd_g_config->cnf_sec_data.prio_cache); + gnutls_dh_params_deinit(fd_g_config->cnf_sec_data.dh_cache); + gnutls_certificate_free_credentials(fd_g_config->cnf_sec_data.credentials); + + free(fd_g_config->cnf_sec_data.cert_file); fd_g_config->cnf_sec_data.cert_file = NULL; + free(fd_g_config->cnf_sec_data.key_file); fd_g_config->cnf_sec_data.key_file = NULL; + free(fd_g_config->cnf_sec_data.ca_file); fd_g_config->cnf_sec_data.ca_file = NULL; + free(fd_g_config->cnf_sec_data.crl_file); fd_g_config->cnf_sec_data.crl_file = NULL; + free(fd_g_config->cnf_sec_data.prio_string); fd_g_config->cnf_sec_data.prio_string = NULL; + + /* Destroy dictionary */ + CHECK_FCT_DO( fd_dict_fini(&fd_g_config->cnf_dict), ); + + /* Destroy the main event queue */ + CHECK_FCT_DO( fd_fifo_del(&fd_g_config->cnf_main_ev), ); + + /* Destroy the local endpoints and applications */ + CHECK_FCT_DO(fd_ep_filter(&fd_g_config->cnf_endpoints, 0 ), ); + CHECK_FCT_DO(fd_app_empty(&fd_g_config->cnf_apps ), ); + + /* Destroy the local identity */ + free(fd_g_config->cnf_diamid); fd_g_config->cnf_diamid = NULL; + free(fd_g_config->cnf_diamrlm); fd_g_config->cnf_diamrlm = NULL; + + return 0; +} + +
--- a/freeDiameter/fD.h Thu Jul 29 10:38:39 2010 +0900 +++ b/freeDiameter/fD.h Thu Jul 29 11:36:40 2010 +0900 @@ -79,6 +79,7 @@ /* Configuration */ int fd_conf_init(); +int fd_conf_deinit(); void fd_conf_dump(); int fd_conf_parse(); int fddparse(struct fd_config * conf); /* yacc generated */
--- a/freeDiameter/main.c Thu Jul 29 10:38:39 2010 +0900 +++ b/freeDiameter/main.c Thu Jul 29 11:36:40 2010 +0900 @@ -169,6 +169,8 @@ GNUTLS_TRACE( gnutls_global_deinit() ); + CHECK_FCT_DO( fd_conf_deinit(), ); + fd_log_debug(FD_PROJECT_BINARY " daemon is terminated.\n"); fd_lib_fini();
--- a/include/freeDiameter/freeDiameter.h Thu Jul 29 10:38:39 2010 +0900 +++ b/include/freeDiameter/freeDiameter.h Thu Jul 29 11:36:40 2010 +0900 @@ -725,5 +725,6 @@ int fd_app_merge(struct fd_list * list, application_id_t aid, vendor_id_t vid, int auth, int acct); int fd_app_check(struct fd_list * list, application_id_t aid, struct fd_app **detail); int fd_app_check_common(struct fd_list * list1, struct fd_list * list2, int * common_found); +int fd_app_empty(struct fd_list * list); #endif /* _FREEDIAMETER_H */