I've verified the patch fixes the memory leak.
Before:
289,792 bytes in 1 blocks are definitely lost in loss record 17 of 18
at 0x4026011: calloc (vg_replace_malloc.c:593)
by 0x404AACA: cgroup_parse_config (config.c:1023)
by 0x404ACB6: cgroup_init_templates_cache (config.c:1508)
by 0x804AE9C: main (cgrulesengd.c:1191)
697,818 (289,792 direct, 408,026 indirect) bytes in 1 blocks are
definitely lost in loss record 18 of 18
at 0x4026011: calloc (vg_replace_malloc.c:593)
by 0x404AAA4: cgroup_parse_config (config.c:1017)
by 0x404ACB6: cgroup_init_templates_cache (config.c:1508)
by 0x804AE9C: main (cgrulesengd.c:1191)
LEAK SUMMARY:
definitely lost: 579,584 bytes in 2 blocks
indirectly lost: 408,026 bytes in 94 blocks
possibly lost: 0 bytes in 0 blocks
still reachable: 1,048,858 bytes in 166 blocks
suppressed: 0 bytes in 0 blocks
After:
HEAP SUMMARY:
in use at exit: 1,048,870 bytes in 167 blocks
total heap usage: 1,728 allocs, 1,561 frees, 2,258,423 bytes allocated
LEAK SUMMARY:
definitely lost: 0 bytes in 0 blocks
indirectly lost: 0 bytes in 0 blocks
possibly lost: 0 bytes in 0 blocks
still reachable: 1,048,870 bytes in 167 blocks
suppressed: 0 bytes in 0 blocks
peter
On 25/10/13 16:03, Ivana Hutarova Varekova wrote:
> cgroup_{reload|init}_cached_templates does not free memory if no template
> is set. This patch fix the problem.
>
> Signed-off-by: Ivana Hutarova Varekova <[email protected]>
Acked-by: Peter Schiffer <[email protected]>
> ---
>
> src/config.c | 13 +++++++++++--
> 1 files changed, 11 insertions(+), 2 deletions(-)
>
> diff --git a/src/config.c b/src/config.c
> index 7240ec1..57703dc 100644
> --- a/src/config.c
> +++ b/src/config.c
> @@ -1468,7 +1468,7 @@ int cgroup_reload_cached_templates(char *pathname)
> }
> template_table_index = 0;
>
> - if (config_template_table_index != 0) {
> + if ((config_template_table_index != 0) || (config_table_index != 0)) {
> /* config template structures have to be free as well*/
> cgroup_free_config();
> }
> @@ -1523,7 +1523,16 @@ int cgroup_init_templates_cache(char *pathname)
> int ret = 0;
> int i;
>
> - if (config_template_table_index != 0) {
> + if (template_table) {
> + /* template structures have to be free */
> + for (i = 0; i < template_table_index; i++)
> + cgroup_free_controllers(&template_table[i]);
> + free(template_table);
> + template_table = NULL;
> + }
> + template_table_index = 0;
> +
> + if ((config_template_table_index != 0) || (config_table_index != 0)) {
> /* config structures have to be clean */
> cgroup_free_config();
> }
>
>
> ------------------------------------------------------------------------------
> October Webinars: Code for Performance
> Free Intel webinars can help you accelerate application performance.
> Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from
> the latest Intel processors and coprocessors. See abstracts and register >
> http://pubads.g.doubleclick.net/gampad/clk?id=60135991&iu=/4140/ostg.clktrk
> _______________________________________________
> Libcg-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/libcg-devel
>
------------------------------------------------------------------------------
October Webinars: Code for Performance
Free Intel webinars can help you accelerate application performance.
Explore tips for MPI, OpenMP, advanced profiling, and more. Get the most from
the latest Intel processors and coprocessors. See abstracts and register >
http://pubads.g.doubleclick.net/gampad/clk?id=60135991&iu=/4140/ostg.clktrk
_______________________________________________
Libcg-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/libcg-devel