nfs.conf tidy ups
Subsystems (2)
PATCH 2/3 nfs.conf tidy ups
Add function to cleanup and free the loaded config
--- support/include/conffile.h | 1 + support/nfs/conffile.c | 51 +++++++++++++++++++++++++++++++++++++++------- 2 files changed, 45 insertions(+), 7 deletions(-)
support/include/conffile.h +1 -0
@@ -60,6 +60,7 @@ extern _Bool conf_get_bool(char *, char *, _Bool);extern char *conf_get_str (char *,char *);extern char *conf_get_section (char *,char *,char *);extern void conf_init (const char *); +extern void conf_cleanup (void );extern int conf_match_num (char *,char *,int );extern int conf_remove (int ,char *,char *);extern int conf_remove_section (int ,char *);
support/nfs/conffile.c +44 -7
75 lines not on this page · raw message
Signature · 1 line
1.8.3.1
Hello,
Quoted 14 lines · Justin Mitchell
Add function to cleanup and free the loaded config
Signed-off-by Justin Mitchell <[email protected]>--- support/include/conffile.h | 1 + support/nfs/conffile.c | 51 +++++++++++++++++++++++++++++++++++++++------- 2 files changed, 45 insertions(+), 7 deletions(-)support/include/conffile.h +0
-0
support/include/conffile.h extern _Bool conf_get_bool(char *, char *, _Bool); · line 63
Quoted 4 lines
support/include/conffile.h +1
-0@@ -60,6 +60,7 @@ extern _Bool conf_get_bool(char *, char *, _Bool);extern char *conf_get_str (char *,char *);extern char *conf_get_section (char *,char *,char *);extern void conf_init (const char *); +extern void conf_cleanup (void );
I don't see this being called any where? How is it being used?
steved.
Quoted 86 lines
support/include/conffile.h +0
-0extern int conf_match_num (char *,char *,int );extern int conf_remove (int ,char *,char *);extern int conf_remove_section (int ,char *);support/nfs/conffile.c +44
-7@@ -414,13 +414,32 @@ conf_load(int trans, const char *path)return -1 ; } +/* remove and free up any existing config state */ +static void conf_free_bindings (void ) +{ +unsigned int i; +for (i =0 ; i <sizeof conf_bindings /sizeof conf_bindings[0 ]; i++) { +struct conf_binding *cb, *next; + + cb =LIST_FIRST (&conf_bindings[i]); +for (; cb; cb = next) { + next =LIST_NEXT (cb, link); +LIST_REMOVE (cb, link); +free (cb->section); +free (cb->arg); +free (cb->tag); +free (cb->value); +free (cb); + } +LIST_INIT (&conf_bindings[i]); + } +} +/* Open the config file and map it into our address space, then parse it. */ static void conf_reinit (const char *conf_file) { -struct conf_binding *cb =0 ;int trans; -unsigned int i; trans =conf_begin ();if (conf_load (trans, conf_file) <0 )@@ -430,12 +449,9 @@ conf_reinit(const char *conf_file)conf_load_defaults ();/* Free potential existing configuration. */ -for (i =0 ; i <sizeof conf_bindings /sizeof conf_bindings[0 ]; i++) { - cb =LIST_FIRST (&conf_bindings[i]); -for (; cb; cb =LIST_FIRST (&conf_bindings[i])) -conf_remove_now (cb->section, cb->tag); - } +conf_free_bindings (); +/* Apply the new configuration values */ conf_end (trans,1 );return ; }@@ -454,6 +470,27 @@ conf_init (const char *conf_file)conf_reinit (conf_file); } +/* +* Empty the config and free up any used memory +*/ +void +conf_cleanup (void ) +{ +conf_free_bindings (); + +struct conf_trans *node, *next; +for (node =TAILQ_FIRST (&conf_trans_queue); node; node = next) { + next =TAILQ_NEXT (node, link); +TAILQ_REMOVE (&conf_trans_queue, node, link); +if (node->section)free (node->section); +if (node->arg)free (node->arg); +if (node->tag)free (node->tag); +if (node->value)free (node->value); +free (node); + } +TAILQ_INIT (&conf_trans_queue); +} +/* * Return the numeric value denoted by TAG in section SECTION or DEF * if that tag does not exist.
Quoted 23 lines · Steve Dickson
Hello,
Quoted 14 lines · Justin Mitchell
Add function to cleanup and free the loaded config
Signed-off-by Justin Mitchell <[email protected]>--- support/include/conffile.h | 1 + support/nfs/conffile.c | 51 +++++++++++++++++++++++++++++++++++++++------- 2 files changed, 45 insertions(+), 7 deletions(-)support/include/conffile.h +0
-0support/include/conffile.h extern _Bool conf_get_bool(char *, char *, _Bool); · line 63
Quoted 4 lines
support/include/conffile.h +1
-0@@ -60,6 +60,7 @@ extern _Bool conf_get_bool(char *, char *, _Bool);extern char *conf_get_str (char *,char *);extern char *conf_get_section (char *,char *,char *);extern void conf_init (const char *); +extern void conf_cleanup (void );I don't see this being called any where? How is it being used?
Quoted 1 line
steved.
It is not directly referenced yet, for completeness all of the programs that use the conf file should call it as part of their shutdown, but of course thats not vital when your process is exiting anyway.
it will however be more important for a library using the same code, and for anything that is going to re-load its config or handle multiple files.
It also gets used in my memory leak testing.
Quoted 3 lines · Justin Mitchell
Add function to cleanup and free the loaded config
Signed-off-by Justin Mitchell <[email protected]>
Committed...
steved.
Quoted 101 lines
--- support/include/conffile.h | 1 + support/nfs/conffile.c | 51 +++++++++++++++++++++++++++++++++++++++------- 2 files changed, 45 insertions(+), 7 deletions(-)support/include/conffile.h +1
-0@@ -60,6 +60,7 @@ extern _Bool conf_get_bool(char *, char *, _Bool);extern char *conf_get_str (char *,char *);extern char *conf_get_section (char *,char *,char *);extern void conf_init (const char *); +extern void conf_cleanup (void );extern int conf_match_num (char *,char *,int );extern int conf_remove (int ,char *,char *);extern int conf_remove_section (int ,char *);support/nfs/conffile.c +44
-7@@ -414,13 +414,32 @@ conf_load(int trans, const char *path)return -1 ; } +/* remove and free up any existing config state */ +static void conf_free_bindings (void ) +{ +unsigned int i; +for (i =0 ; i <sizeof conf_bindings /sizeof conf_bindings[0 ]; i++) { +struct conf_binding *cb, *next; + + cb =LIST_FIRST (&conf_bindings[i]); +for (; cb; cb = next) { + next =LIST_NEXT (cb, link); +LIST_REMOVE (cb, link); +free (cb->section); +free (cb->arg); +free (cb->tag); +free (cb->value); +free (cb); + } +LIST_INIT (&conf_bindings[i]); + } +} +/* Open the config file and map it into our address space, then parse it. */ static void conf_reinit (const char *conf_file) { -struct conf_binding *cb =0 ;int trans; -unsigned int i; trans =conf_begin ();if (conf_load (trans, conf_file) <0 )@@ -430,12 +449,9 @@ conf_reinit(const char *conf_file)conf_load_defaults ();/* Free potential existing configuration. */ -for (i =0 ; i <sizeof conf_bindings /sizeof conf_bindings[0 ]; i++) { - cb =LIST_FIRST (&conf_bindings[i]); -for (; cb; cb =LIST_FIRST (&conf_bindings[i])) -conf_remove_now (cb->section, cb->tag); - } +conf_free_bindings (); +/* Apply the new configuration values */ conf_end (trans,1 );return ; }@@ -454,6 +470,27 @@ conf_init (const char *conf_file)conf_reinit (conf_file); } +/* +* Empty the config and free up any used memory +*/ +void +conf_cleanup (void ) +{ +conf_free_bindings (); + +struct conf_trans *node, *next; +for (node =TAILQ_FIRST (&conf_trans_queue); node; node = next) { + next =TAILQ_NEXT (node, link); +TAILQ_REMOVE (&conf_trans_queue, node, link); +if (node->section)free (node->section); +if (node->arg)free (node->arg); +if (node->tag)free (node->tag); +if (node->value)free (node->value); +free (node); + } +TAILQ_INIT (&conf_trans_queue); +} +/* * Return the numeric value denoted by TAG in section SECTION or DEF * if that tag does not exist.