[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