[libvirt] [PATCH 1/4] Add mutex locking and reference counting to virNetSocket

Eric Blake eblake at redhat.com
Tue Jul 19 13:45:23 UTC 2011


On 07/19/2011 07:22 AM, Daniel P. Berrange wrote:
> From: "Daniel P. Berrange"<berrange at redhat.com>
>
> Remove the need for a virNetSocket object to be protected by
> locks from the object using it, by introducing its own native
> locking and reference counting
>
> * src/rpc/virnetsocket.c: Add locking&  reference counting
> ---
>   src/rpc/virnetsocket.c |  147 +++++++++++++++++++++++++++++++++++++++---------
>   1 files changed, 120 insertions(+), 27 deletions(-)
>
> diff --git a/src/rpc/virnetsocket.c b/src/rpc/virnetsocket.c
> index 7ea1ab7..8dd4d3a 100644
> --- a/src/rpc/virnetsocket.c
> +++ b/src/rpc/virnetsocket.c
> @@ -40,6 +40,7 @@
>   #include "logging.h"
>   #include "files.h"
>   #include "event.h"
> +#include "threads.h"
>
>   #define VIR_FROM_THIS VIR_FROM_RPC
>
> @@ -49,6 +50,9 @@
>
>
>   struct _virNetSocket {
> +    virMutex lock;
> +    int refs;

Someday we should revive the virObject patches, for lighter-weight 
atomic-op reference counting.  But that shouldn't hold up this patch.

>   int virNetSocketAddIOCallback(virNetSocketPtr sock,
>                                 int events,
>                                 virNetSocketIOFunc func,
>                                 void *opaque)
>   {
> +    int ret = -1;
> +
> +    virMutexLock(&sock->lock);
>       if (sock->watch>  0) {
>           VIR_DEBUG("Watch already registered on socket %p", sock);
> -        return -1;
> +        goto cleanup;
>       }
>
> +    sock->refs++;

This increases the ref-count on registration, but...
>   void virNetSocketRemoveIOCallback(virNetSocketPtr sock)
>   {
> +    virMutexLock(&sock->lock);
> +
>       if (sock->watch<= 0) {
>           VIR_DEBUG("Watch not registered on socket %p", sock);
> +        virMutexUnlock(&sock->lock);
>           return;
>       }
>
>       virEventRemoveHandle(sock->watch);
> -    sock->watch = 0;
> +
> +    virMutexUnlock(&sock->lock);
>   }

...this doesn't decrease it.  Am I missing something?

Once that question is answered, then ACK to the rest of the patch.

-- 
Eric Blake   eblake at redhat.com    +1-801-349-2682
Libvirt virtualization library http://libvirt.org




More information about the libvir-list mailing list