Looks great. Thanks!

On Fri, Apr 25, 2014 at 9:56 AM, Ben Pfaff <b...@nicira.com> wrote:
> If 'lacp' is NULL, then lacp_create() might not have been called to
> indirectly initialize the mutex via lacp_init(), so call lacp_init()
> from lacp_status().
>
> Signed-off-by: Ben Pfaff <b...@nicira.com>
> Acked-by: Andy Zhou <az...@nicira.com>
> ---
>  lib/lacp.c |   18 +++++++++++-------
>  1 file changed, 11 insertions(+), 7 deletions(-)
>
> diff --git a/lib/lacp.c b/lib/lacp.c
> index 4aee64f..dfb7159 100644
> --- a/lib/lacp.c
> +++ b/lib/lacp.c
> @@ -199,21 +199,23 @@ parse_lacp_packet(const struct ofpbuf *b)
>  void
>  lacp_init(void)
>  {
> -    unixctl_command_register("lacp/show", "[port]", 0, 1,
> -                             lacp_unixctl_show, NULL);
> +    static struct ovsthread_once once = OVSTHREAD_ONCE_INITIALIZER;
> +
> +    if (ovsthread_once_start(&once)) {
> +        ovs_mutex_init_recursive(&mutex);
> +        unixctl_command_register("lacp/show", "[port]", 0, 1,
> +                                 lacp_unixctl_show, NULL);
> +        ovsthread_once_done(&once);
> +    }
>  }
>
>  /* Creates a LACP object. */
>  struct lacp *
>  lacp_create(void) OVS_EXCLUDED(mutex)
>  {
> -    static struct ovsthread_once once = OVSTHREAD_ONCE_INITIALIZER;
>      struct lacp *lacp;
>
> -    if (ovsthread_once_start(&once)) {
> -        ovs_mutex_init_recursive(&mutex);
> -        ovsthread_once_done(&once);
> -    }
> +    lacp_init();
>
>      lacp = xzalloc(sizeof *lacp);
>      hmap_init(&lacp->slaves);
> @@ -347,6 +349,8 @@ lacp_status(const struct lacp *lacp) OVS_EXCLUDED(mutex)
>  {
>      enum lacp_status ret;
>
> +    lacp_init();
> +
>      ovs_mutex_lock(&mutex);
>      if (!lacp) {
>          ret = LACP_DISABLED;
> --
> 1.7.10.4
>
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to