"Richard W.M. Jones" <rjones(a)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
...