From: Justin Mitchell <jumitche@redhat.com>
To: "linux-nfs@vger.kernel.org" <linux-nfs@vger.kernel.org>
Subject: [PATCH 2/3] nfs.conf tidy ups
Date: Mon, 22 May 2017 16:50:04 +0100 [thread overview]
Message-ID: <1495468204.4169.10.camel@redhat.com> (raw)
Add function to cleanup and free the loaded config
Signed-off-by: Justin Mitchell <jumitche@rehat.com>
---
support/include/conffile.h | 1 +
support/nfs/conffile.c | 51 +++++++++++++++++++++++++++++++++++++++-------
2 files changed, 45 insertions(+), 7 deletions(-)
diff --git a/support/include/conffile.h b/support/include/conffile.h
index 20b1a32..2d11a52 100644
--- a/support/include/conffile.h
+++ b/support/include/conffile.h
@@ -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 *);
diff --git a/support/nfs/conffile.c b/support/nfs/conffile.c
index a76c7e3..7c607c0 100644
--- a/support/nfs/conffile.c
+++ b/support/nfs/conffile.c
@@ -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.
--
1.8.3.1
next reply other threads:[~2017-05-22 15:50 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-05-22 15:50 Justin Mitchell [this message]
2017-06-01 14:45 ` [PATCH 2/3] nfs.conf tidy ups Steve Dickson
2017-06-02 9:05 ` Justin Mitchell
2017-06-06 14:37 ` Steve Dickson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1495468204.4169.10.camel@redhat.com \
--to=jumitche@redhat.com \
--cc=linux-nfs@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.