glib: Fix static usage of glib on win32

When glib is built static, the threads and clock code are not
initialized since DllMain is never run. Instead, initialize them from
the glib constructor.

https://bugzilla.gnome.org/show_bug.cgi?id=678387
This commit is contained in:
Dan Nicholson 2012-08-17 11:37:04 -07:00
parent f0e821fed2
commit cf9089f5ec
3 changed files with 41 additions and 0 deletions

View file

@ -6,3 +6,4 @@ no-pkg-config.patch
no-gettext.patch
cross-compiling.patch
static-only.patch
win32-static-init.patch

View file

@ -0,0 +1,32 @@
When glib is built static, the threads and clock code are not
initialized since DllMain is never run. Instead, initialize them from
the glib constructor.
https://bugzilla.gnome.org/show_bug.cgi?id=678387
diff --git a/glib/glib/glib-init.c b/glib/glib/glib-init.c
index f4edd5c..3ec89a0 100644
--- a/glib/glib/glib-init.c
+++ b/glib/glib/glib-init.c
@@ -225,6 +225,10 @@ glib_init (void)
HMODULE glib_dll;
+#endif
+
+#if defined (G_OS_WIN32) && !defined (GLIB_STATIC_COMPILATION)
+
BOOL WINAPI
DllMain (HINSTANCE hinstDLL,
DWORD fdwReason,
@@ -261,6 +265,10 @@ G_DEFINE_CONSTRUCTOR(glib_init_ctor)
static void
glib_init_ctor (void)
{
+#ifdef G_OS_WIN32
+ g_clock_win32_init ();
+ g_thread_win32_init ();
+#endif
glib_init ();
}

View file

@ -225,6 +225,10 @@ glib_init (void)
HMODULE glib_dll;
#endif
#if defined (G_OS_WIN32) && !defined (GLIB_STATIC_COMPILATION)
BOOL WINAPI
DllMain (HINSTANCE hinstDLL,
DWORD fdwReason,
@ -261,6 +265,10 @@ G_DEFINE_CONSTRUCTOR(glib_init_ctor)
static void
glib_init_ctor (void)
{
#ifdef G_OS_WIN32
g_clock_win32_init ();
g_thread_win32_init ();
#endif
glib_init ();
}