On Thu, Jan 25, 2018 at 3:39 PM, Ben Pfaff <b...@ovn.org> wrote:
> The asynchronous IO library in glibc starts threads that show up as memory
> leaks in valgrind.  This commit attempts to avoid the warnings by flushing
> all the asynchronous I/O to the log file before exiting.  This only does
> part of the job for glibc since it keeps the threads around for some
> undefined idle time before killing them, so in addition this commit adds a
> valgrind suppression to stop displaying these warnings in any case.
>
> Signed-off-by: Ben Pfaff <b...@ovn.org>
> ---

Looks good to me.
Acked-by: William Tu <u9012...@gmail.com>

>  include/openvswitch/vlog.h |  1 +
>  lib/vlog.c                 | 10 ++++++++++
>  tests/glibc.supp           |  9 +++++++++
>  vswitchd/ovs-vswitchd.c    |  1 +
>  4 files changed, 21 insertions(+)
>
> diff --git a/include/openvswitch/vlog.h b/include/openvswitch/vlog.h
> index 3a4042113a36..98d477911acc 100644
> --- a/include/openvswitch/vlog.h
> +++ b/include/openvswitch/vlog.h
> @@ -146,6 +146,7 @@ void vlog_set_syslog_target(const char *target);
>  /* Initialization. */
>  void vlog_init(void);
>  void vlog_enable_async(void);
> +void vlog_disable_async(void);
>
>  /* Functions for actual logging. */
>  void vlog(const struct vlog_module *, enum vlog_level, const char *format, 
> ...)
> diff --git a/lib/vlog.c b/lib/vlog.c
> index 6e87665fcd11..f286950431ff 100644
> --- a/lib/vlog.c
> +++ b/lib/vlog.c
> @@ -836,6 +836,16 @@ vlog_enable_async(void)
>      ovs_mutex_unlock(&log_file_mutex);
>  }
>
> +void
> +vlog_disable_async(void)
> +{
> +    ovs_mutex_lock(&log_file_mutex);
> +    log_async = false;
> +    async_append_destroy(log_writer);
> +    log_writer = NULL;
> +    ovs_mutex_unlock(&log_file_mutex);
> +}
> +
>  /* Print the current logging level for each module. */
>  char *
>  vlog_get_levels(void)
> diff --git a/tests/glibc.supp b/tests/glibc.supp
> index 948ee013f458..031f8bde0f77 100644
> --- a/tests/glibc.supp
> +++ b/tests/glibc.supp
> @@ -15,3 +15,12 @@
>     fun:set_up_timer
>  }
>
> +{
> +   aio
> +   Memcheck:Leak
> +   fun:calloc
> +   ...
> +   fun:allocate_stack
> +   ...
> +   fun:__aio_create_helper_thread
> +}
> diff --git a/vswitchd/ovs-vswitchd.c b/vswitchd/ovs-vswitchd.c
> index 53e511999594..12cb5d494d41 100644
> --- a/vswitchd/ovs-vswitchd.c
> +++ b/vswitchd/ovs-vswitchd.c
> @@ -136,6 +136,7 @@ main(int argc, char *argv[])
>      bridge_exit(cleanup);
>      unixctl_server_destroy(unixctl);
>      service_stop();
> +    vlog_disable_async();
>      ovsrcu_exit();
>
>      return 0;
> --
> 2.10.2
>
> _______________________________________________
> dev mailing list
> d...@openvswitch.org
> https://mail.openvswitch.org/mailman/listinfo/ovs-dev
_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to