From 2ca9dda72aa85756010dfc9b73aa0d891e61bf29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A0=D1=83=D1=81=D0=BB=D0=B0=D0=BD=20=D0=98=D0=B6=D0=B1?= =?UTF-8?q?=D1=83=D0=BB=D0=B0=D1=82=D0=BE=D0=B2?= Date: Tue, 9 Apr 2013 14:09:33 +0200 Subject: [PATCH] win32: Allow POSIX threads to be used if --with-threads=posix All tests pass with this patch AND a good pthreads implementation (i'm using winpthreads, not pthreads-w32). https://bugzilla.gnome.org/show_bug.cgi?id=697626 --- configure.ac | 6 ++++++ glib/Makefile.am | 4 +++- glib/glib-init.c | 4 ++++ glib/gthread-posix.c | 3 +++ 4 files changed, 16 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 73c9d60f4..55d1c55b1 100644 --- a/configure.ac +++ b/configure.ac @@ -2177,14 +2177,20 @@ AS_IF([test x$have_threads = xposix], [ ]) g_threads_impl="POSIX" + AC_DEFINE([THREADS_POSIX], [1], [Use pthreads]) AC_SUBST(GTHREAD_COMPILE_IMPL_DEFINES) CPPFLAGS="$glib_save_CPPFLAGS" ], [test x$have_threads = xwin32], [ + AC_DEFINE([THREADS_WIN32], [1], [Use w32 threads]) g_threads_impl="WIN32" ], [ + AC_DEFINE([THREADS_NONE], [1], [Use no threads]) g_threads_impl="NONE" G_THREAD_LIBS=error ]) +AM_CONDITIONAL(THREADS_POSIX, [test "$g_threads_impl" = "POSIX"]) +AM_CONDITIONAL(THREADS_WIN32, [test "$g_threads_impl" = "WIN32"]) +AM_CONDITIONAL(THREADS_NONE, [test "$g_threads_impl" = "NONE"]) if test "x$G_THREAD_LIBS" = xerror; then AC_MSG_ERROR($LIBS_NOT_FOUND_1$have_threads$LIBS_NOT_FOUND_2) diff --git a/glib/Makefile.am b/glib/Makefile.am index 021a26afa..98d91af78 100644 --- a/glib/Makefile.am +++ b/glib/Makefile.am @@ -214,11 +214,13 @@ if OS_UNIX libglib_2_0_la_SOURCES += glib-unix.c endif -if OS_WIN32 +if THREADS_WIN32 libglib_2_0_la_SOURCES += gthread-win32.c else +if THREADS_POSIX libglib_2_0_la_SOURCES += gthread-posix.c endif +endif EXTRA_libglib_2_0_la_SOURCES = \ giounix.c \ diff --git a/glib/glib-init.c b/glib/glib-init.c index 49c7f6194..0032ee876 100644 --- a/glib/glib-init.c +++ b/glib/glib-init.c @@ -239,12 +239,16 @@ DllMain (HINSTANCE hinstDLL, case DLL_PROCESS_ATTACH: glib_dll = hinstDLL; g_clock_win32_init (); +#ifdef THREADS_WIN32 g_thread_win32_init (); +#endif glib_init (); break; case DLL_THREAD_DETACH: +#ifdef THREADS_WIN32 g_thread_win32_thread_detach (); +#endif break; default: diff --git a/glib/gthread-posix.c b/glib/gthread-posix.c index e65e43787..23371ae0f 100644 --- a/glib/gthread-posix.c +++ b/glib/gthread-posix.c @@ -66,6 +66,9 @@ #ifdef HAVE_SYS_PRCTL_H #include #endif +#ifdef G_OS_WIN32 +#include +#endif static void g_thread_abort (gint status,