[Libvir] MinGW patch
Jim Meyering
jim at meyering.net
Thu Apr 17 20:20:57 UTC 2008
"Richard W.M. Jones" <rjones at redhat.com> wrote:
> I got about 95% of the way towards compiling on MinGW using the MinGW
> cross-compiler from http://mirzam.it.vu.nl/mingw/. Attached are some
> fairly non-controversial patches which fix some of the problems I
> found. Build notes follow below.
...
> Index: src/hash.c
> ===================================================================
> RCS file: /data/cvs/libvirt/src/hash.c,v
> retrieving revision 1.36
> diff -u -r1.36 hash.c
> --- src/hash.c 10 Apr 2008 16:53:29 -0000 1.36
> +++ src/hash.c 17 Apr 2008 18:55:16 -0000
> @@ -25,7 +25,10 @@
> #include <libxml/threads.h>
> #include "internal.h"
> #include "hash.h"
> +
> +#if HAVE_PTHREAD_H
> #include <pthread.h>
> +#endif
Hi Rich,
Looks good.
You might want to define-away the pthread_* functions instead.
With definitions something like this (untested) you can remove
all of those in-function #if directives.
#if HAVE_PTHREAD_H
# include <pthread.h>
#else
# define pthread_mutex_init(a, b) /* empty */
# define pthread_mutex_lock(a) /* empty */
# define pthread_mutex_unlock(a) /* empty */
# define pthread_mutex_destroy(a) /* empty */
#endif
>
> #define MAX_HASH_LEN 8
>
> @@ -713,7 +716,9 @@
> if (ret->storageVols == NULL)
> goto failed;
>
> +#if HAVE_LIBPTHREAD
> pthread_mutex_init(&ret->lock, NULL);
> +#endif
>
> ret->refs = 1;
> return(ret);
> @@ -729,7 +734,9 @@
> if (ret->storageVols != NULL)
> virHashFree(ret->storageVols, (virHashDeallocator) virStorageVolFreeName);
>
> +#if HAVE_LIBPTHREAD
> pthread_mutex_destroy(&ret->lock);
> +#endif
> free(ret);
> }
> return(NULL);
> @@ -762,8 +769,10 @@
>
> free(conn->name);
>
> +#if HAVE_LIBPTHREAD
> pthread_mutex_unlock(&conn->lock);
> pthread_mutex_destroy(&conn->lock);
> +#endif
> free(conn);
> }
>
> @@ -784,7 +793,9 @@
> virHashError(conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
> return(-1);
> }
> +#if HAVE_LIBPTHREAD
> pthread_mutex_lock(&conn->lock);
> +#endif
> DEBUG("unref connection %p %s %d", conn, conn->name, conn->refs);
> conn->refs--;
> refs = conn->refs;
> @@ -793,7 +804,9 @@
> /* Already unlocked mutex */
> return (0);
> }
> +#if HAVE_LIBPTHREAD
> pthread_mutex_unlock(&conn->lock);
> +#endif
> return (refs);
> }
>
> @@ -818,7 +831,9 @@
> virHashError(conn, VIR_ERR_INVALID_ARG, __FUNCTION__);
> return(NULL);
> }
> +#if HAVE_LIBPTHREAD
> pthread_mutex_lock(&conn->lock);
> +#endif
>
> /* TODO search by UUID first as they are better differenciators */
>
> @@ -849,11 +864,15 @@
> conn->refs++;
> }
> ret->refs++;
> +#if HAVE_LIBPTHREAD
> pthread_mutex_unlock(&conn->lock);
> +#endif
> return(ret);
>
> error:
> +#if HAVE_LIBPTHREAD
> pthread_mutex_unlock(&conn->lock);
> +#endif
...
More information about the libvir-list
mailing list