----- Original Message -----
> From: "jchaloup" <[email protected]>
> To: [email protected]
> Cc: [email protected]
> Sent: Tuesday, May 20, 2014 10:11:25 AM
> Subject: [PATCH 2/4] cgrulesengd.c: loading of multiples files during
> init/reload from daemon
>
> This patch use new implementation. In cgrulesengd.c, static variable
> template_files is used to save all config files, i.e. /etc/cgconfig.conf and
> /etc/cgconfig.d/*. This list of files is then passed to
> cgroup_templates_cache_set_source_files, which saves files to template_files
> in config.c module. This list is accessed through invocation of
> cgroup_init_templates_cache_from_files and
> cgroup_reload_templates_cache_from_files, which can access variables only
> from config.c, thus presenting cgroup_templates_cache_set_source_files
> function. At the end, this list is set free.
>
> Signed-off-by: jchaloup <[email protected]>
> ---
> src/daemon/cgrulesengd.c | 40 ++++++++++++++++++++++++++++++++++++----
> src/libcgroup-internal.h | 3 +++
> src/tools/tools-common.h | 2 +-
> 3 files changed, 40 insertions(+), 5 deletions(-)
>
> diff --git a/src/daemon/cgrulesengd.c b/src/daemon/cgrulesengd.c
> index 367b898..5b6d513 100644
> --- a/src/daemon/cgrulesengd.c
> +++ b/src/daemon/cgrulesengd.c
> @@ -34,6 +34,7 @@
> #include "libcgroup.h"
> #include "cgrulesengd.h"
> #include "../libcgroup-internal.h"
> +#include "../tools/tools-common.h"
>
> #include <errno.h>
> #include <stdarg.h>
> @@ -59,6 +60,9 @@
>
> #define NUM_PER_REALLOCATIOM (100)
>
> +/* list of config files from /etc/cgconfig.conf and /etc/cgconfig.d/ */
use z CGCONFIG_CONF_FILE a ..DIR here
> +static struct cgroup_string_list template_files;
> +
> /* Log file, NULL if logging to file is disabled */
> FILE* logfile;
>
> @@ -1180,6 +1184,25 @@ int main(int argc, char *argv[])
> }
>
> /* Ask libcgroup to load the configuration rules. */
> + ret = cgroup_string_list_init(&template_files,
> + CGCONFIG_CONF_FILES_LIST_MINIMUM_SIZE);
> + if (ret) {
> + fprintf(stderr, "%s: cannot init file list, out of memory?\n",
> + argv[0]);
> + goto finished;
> + }
> + /* first add CGCONFIG_CONF_FILE into file list */
> + ret = cgroup_string_list_add_item(&template_files, CGCONFIG_CONF_FILE);
> + if (ret) {
> + fprintf(stderr, "%s: cannot add file to list, out of memory?\n"
> + , argv[0]);
> + goto finished;
> + }
> +
> + /* then read CGCONFIG_CONF_DIR directory for additional config files */
> + cgroup_string_list_add_directory(&template_files, CGCONFIG_CONF_DIR,
> + argv[0]);
> +
> if ((ret = cgroup_init_rules_cache()) != 0) {
> fprintf(stderr, "Error: libcgroup failed to initialize rules"
> "cache from %s. %s\n", CGRULES_CONF_FILE,
> @@ -1188,11 +1211,18 @@ int main(int argc, char *argv[])
> }
>
> /* ask libcgroup to load template rules as well */
> - ret = cgroup_init_templates_cache(CGCONFIG_CONF_FILE);
> + cgroup_templates_cache_set_source_files(&template_files);
> + int fileindex;
please allocate variables at the beginning of function
> + ret = cgroup_init_templates_cache_from_files(&fileindex);
> if (ret != 0) {
> - fprintf(stderr, "Error: libcgroup failed to initialize teplate"\
> - "rules from %s. %s\n", CGCONFIG_CONF_FILE,
> - cgroup_strerror(ret));
> + if (fileindex < 0) {
> +#define DE1 "Error: Template source files have not been set\n"
don't use define here
> + fprintf(stderr, DE1);
> + } else {
> +#define DE2 "Error: Failed to initialize template rules from %s. %s\n"
> + fprintf(stderr, DE2, template_files.items[fileindex],
> + cgroup_strerror(-ret));
> + }
> goto finished;
> }
>
> @@ -1262,5 +1292,7 @@ finished:
> if (logfile && logfile != stdout)
> fclose(logfile);
>
> + cgroup_string_list_free(&template_files);
this function should not be called if template files variable is not set e.g.
in case when cgroup_string_list_init is not true.
so reorder finished: part and create new goto label
> +
> return ret;
> }
> diff --git a/src/libcgroup-internal.h b/src/libcgroup-internal.h
> index 4c0f46c..c128788 100644
> --- a/src/libcgroup-internal.h
> +++ b/src/libcgroup-internal.h
> @@ -48,6 +48,9 @@ __BEGIN_DECLS
>
>
> #define CGCONFIG_CONF_FILE "/etc/cgconfig.conf"
> +/* Minimum number of file in template file list for cgrulesengd */
> +#define CGCONFIG_CONF_FILES_LIST_MINIMUM_SIZE 4
> +#define CGCONFIG_CONF_DIR "/etc/cgconfig.d"
>
> #define CGRULES_CONF_FILE "/etc/cgrules.conf"
> #define CGRULES_MAX_FIELDS_PER_LINE 3
> diff --git a/src/tools/tools-common.h b/src/tools/tools-common.h
> index e05465f..c723eb4 100644
> --- a/src/tools/tools-common.h
> +++ b/src/tools/tools-common.h
> @@ -20,7 +20,7 @@
>
> #include "config.h"
> #include <libcgroup.h>
> -#include <libcgroup-internal.h>
> +#include "../libcgroup-internal.h"
>
> #define cgroup_err(x...) cgroup_log(CGROUP_LOG_ERROR, x)
> #define cgroup_warn(x...) cgroup_log(CGROUP_LOG_WARNING, x)
>
>
------------------------------------------------------------------------------
The best possible search technologies are now affordable for all companies.
Download your FREE open source Enterprise Search Engine today!
Our experts will assist you in its installation for $59/mo, no commitment.
Test it for FREE on our Cloud platform anytime!
http://pubads.g.doubleclick.net/gampad/clk?id=145328191&iu=/4140/ostg.clktrk
_______________________________________________
Libcg-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/libcg-devel