[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