xl: free bitmaps on exit
PATCH v2 1/1 xl: free bitmaps on exit
Every invocation of xl via valgrind will show three leaks. Since libxl_bitmap_alloc uses NOGC, the caller has to free the memory after use. And since xl_ctx_free might be called before parse_global_config, also move the libxl_bitmap_init calls into xl_ctx_alloc.
--- tools/xl/xl.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)
tools/xl/xl.c +6 -3
@@ -209,11 +209,8 @@ static void parse_global_config(const char *configfile,if (!xlu_cfg_get_long (config,"max_maptrack_frames" , &l,0 )) max_maptrack_frames = l; -libxl_bitmap_init (&global_vm_affinity_mask);libxl_cpu_bitmap_alloc (ctx, &global_vm_affinity_mask,0 ); -libxl_bitmap_init (&global_hvm_affinity_mask);libxl_cpu_bitmap_alloc (ctx, &global_hvm_affinity_mask,0 ); -libxl_bitmap_init (&global_pv_affinity_mask);libxl_cpu_bitmap_alloc (ctx, &global_pv_affinity_mask,0 );if (!xlu_cfg_get_string (config,"vm.cpumask" , &buf,0 ))
@@ -323,11 +320,17 @@ void xl_ctx_alloc(void) {exit (1 ); } +libxl_bitmap_init (&global_vm_affinity_mask); +libxl_bitmap_init (&global_hvm_affinity_mask); +libxl_bitmap_init (&global_pv_affinity_mask);libxl_childproc_setmode (ctx, &childproc_hooks,0 ); }static void xl_ctx_free (void ) { +libxl_bitmap_dispose (&global_pv_affinity_mask); +libxl_bitmap_dispose (&global_hvm_affinity_mask); +libxl_bitmap_dispose (&global_vm_affinity_mask);if (ctx) {libxl_ctx_free (ctx); ctx =NULL ;
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel
Quoted 7 lines · Olaf Hering
Every invocation of xl via valgrind will show three leaks. Since
libxl_bitmap_allocuses NOGC, the caller has to free the memory after use. And sincexl_ctx_freemight be called beforeparse_global_config, also move thelibxl_bitmap_initcalls intoxl_ctx_alloc.Signed-off-by Olaf Hering <[email protected]>
Thanks for fixing this.
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel
Quoted 28 lines · Olaf Hering
Every invocation of xl via valgrind will show three leaks. Since
libxl_bitmap_allocuses NOGC, the caller has to free the memory after use. And sincexl_ctx_freemight be called beforeparse_global_config, also move thelibxl_bitmap_initcalls intoxl_ctx_alloc.Signed-off-by Olaf Hering <[email protected]>--- tools/xl/xl.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-)tools/xl/xl.c +0
-3@@ -209,11 +209,8 @@ static void parse_global_config(const char *configfile,if (!xlu_cfg_get_long (config,"max_maptrack_frames" , &l,0 )) max_maptrack_frames = l; -libxl_bitmap_init (&global_vm_affinity_mask);libxl_cpu_bitmap_alloc (ctx, &global_vm_affinity_mask,0 ); -libxl_bitmap_init (&global_hvm_affinity_mask);libxl_cpu_bitmap_alloc (ctx, &global_hvm_affinity_mask,0 ); -libxl_bitmap_init (&global_pv_affinity_mask);libxl_cpu_bitmap_alloc (ctx, &global_pv_affinity_mask,0 );if (!xlu_cfg_get_string (config,"vm.cpumask" , &buf,0 ))
tools/xl/xl.c void xl_ctx_alloc(void) { · line 325
Quoted 6 lines
tools/xl/xl.c +3
-0@@ -323,11 +320,17 @@ void xl_ctx_alloc(void) {exit (1 ); } +libxl_bitmap_init (&global_vm_affinity_mask); +libxl_bitmap_init (&global_hvm_affinity_mask); +libxl_bitmap_init (&global_pv_affinity_mask);
Looking more closely into this, these lines should be moved even earlier before the call to libxl_ctx_alloc -- there is an exit there.
Sorry for not having noticed this earlier before giving my ack. Please submit v3.
Wei.
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel
Am Tue, 27 Nov 2018 16:55:38 +0000
schrieb Wei Liu <[email protected]>:
Quoted 2 lines
Looking more closely into this, these lines should be moved even earlier before the call to
libxl_ctx_alloc-- there is an exit there.
Is it required to install the atexit handler before alloc()?
To me it looks like atexit(xl_ctx_free) should be done right after, or inside, xl_ctx_alloc().
Olaf
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel
Quoted 8 lines · Olaf Hering
Am Tue, 27 Nov 2018 16:55:38 +0000
schrieb Wei Liu <[email protected]>:Quoted 2 lines
Looking more closely into this, these lines should be moved even earlier before the call to
libxl_ctx_alloc-- there is an exit there.Is it required to install the atexit handler before
alloc()?
To me it looks likeatexit(xl_ctx_free)should be done right after, or inside,xl_ctx_alloc().
Note that multiple calls to atexit creates a chain of functions to call, not overriding what is previously registered.
The xl_ctx_alloc function is also called in postfork. I think if you move atexit call into xl_ctx_alloc you will end up registering xl_ctx_free more than once, which is wrong.
The other option -- to call atexit right after -- looks plausible to me.
Wei.
Quoted 2 lines
Olaf
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel
Am Tue, 27 Nov 2018 17:19:06 +0000
schrieb Wei Liu <[email protected]>:
Quoted 1 line
The other option -- to call atexit right after -- looks plausible to me.
After looking through main(), moving the atexit() seems safe to me.
Olaf
_______________________________________________
Xen-devel mailing list
[email protected]
https://lists.xenproject.org/mailman/listinfo/xen-devel