[libvirt] [PATCH 4/5] Change virConnectPtr into virObjectLocklable

Peter Krempa pkrempa at redhat.com
Wed Apr 15 07:50:18 UTC 2015


On Mon, Apr 13, 2015 at 16:33:51 +0200, Martin Kletzander wrote:
> It already had a virMutex inside, so this is just a cleanup.

It also probably fixes a potential deadlock too.

> 
> Signed-off-by: Martin Kletzander <mkletzan at redhat.com>
> ---
>  src/datatypes.c     | 12 ++----------
>  src/datatypes.h     | 12 +++++-------
>  src/libvirt-host.c  | 18 +++++++++---------
>  src/util/virerror.c | 18 +++++++++---------
>  4 files changed, 25 insertions(+), 35 deletions(-)
> 

...

> diff --git a/src/datatypes.h b/src/datatypes.h
> index 4973b07..9e19c55 100644
> --- a/src/datatypes.h
> +++ b/src/datatypes.h
> @@ -1,7 +1,7 @@
>  /*
>   * datatypes.h: management of structs for public data types
>   *
> - * Copyright (C) 2006-2014 Red Hat, Inc.
> + * Copyright (C) 2006-2015 Red Hat, Inc.

Yay, it's 2015 already? We are going to get hoverboards this year!

>   *
>   * This library is free software; you can redistribute it and/or
>   * modify it under the terms of the GNU Lesser General Public
> @@ -328,7 +328,7 @@ struct _virConnectCloseCallbackData {
>   * Internal structure associated to a connection
>   */
>  struct _virConnect {
> -    virObject object;
> +    virObjectLockable object;
>      /* All the variables from here, until the 'lock' declaration
>       * are setup at time of connection open, and never changed
>       * since. Thus no need to lock when accessing them

The lock delcaration is no longer here, so you should mention the
comment you've changed below.

> @@ -352,12 +352,10 @@ struct _virConnect {
>      void *            privateData;
> 
>      /*
> -     * The lock mutex must be acquired before accessing/changing
> -     * any of members following this point, or changing the ref
> -     * count of any virDomain/virNetwork object associated with
> -     * this connection
> +     * Object lock must be acquired before accessing/changing any of
> +     * members following this point, or changing the ref count of any
> +     * virDomain/virNetwork object associated with this connection.
>       */
> -    virMutex lock;
> 
>      /* Per-connection error. */
>      virError err;           /* the last error */

...

> diff --git a/src/libvirt-host.c b/src/libvirt-host.c
> index b4dc13e..03bee1f 100644
> --- a/src/libvirt-host.c
> +++ b/src/libvirt-host.c

...

> @@ -1288,15 +1288,15 @@ virConnectUnregisterCloseCallback(virConnectPtr conn,
>          conn->closeCallback->freeCallback(conn->closeCallback->opaque);
>      conn->closeCallback->freeCallback = NULL;
> 
> -    virObjectUnref(conn);
>      virObjectUnlock(conn->closeCallback);
> -    virMutexUnlock(&conn->lock);
> +    virObjectUnlock(conn);
> +    virObjectUnref(conn);

So this is the only semantic change in this patch. I'm surprised it
didn't bite us at some point actually, since the connection dispose code
is/was locking conn->lock. Perhaps it didn't ever order in the wrong
way.

> 
>      return 0;
> 
>   error:
>      virObjectUnlock(conn->closeCallback);
> -    virMutexUnlock(&conn->lock);
> +    virObjectUnlock(conn);
>      virDispatchError(conn);
>      return -1;
>  }

ACK with the comment updated.

Peter
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20150415/ffa77d36/attachment-0001.sig>


More information about the libvir-list mailing list