Increase to 100. 16 was rather low. (g_private_new_win32_impl): Can't use

2006-03-02  Tor Lillqvist  <tml@novell.com>

	* gthread-win32.c (G_PRIVATE_MAX): Increase to 100. 16 was rather
	low.
	(g_private_new_win32_impl): Can't use g_error() here as
	g_private_new() is called a few times by GLib internally before
	the messaging system that g_error() requires is ready. Thanks to
	Tim Janik for noticing. Just display a MessageBox() and abort()
	instead.
This commit is contained in:
Tor Lillqvist 2006-03-02 12:05:40 +00:00 committed by Tor Lillqvist
parent 5a2950d041
commit e94abca52d
2 changed files with 22 additions and 3 deletions

View File

@ -1,3 +1,13 @@
2006-03-02 Tor Lillqvist <tml@novell.com>
* gthread-win32.c (G_PRIVATE_MAX): Increase to 100. 16 was rather
low.
(g_private_new_win32_impl): Can't use g_error() here as
g_private_new() is called a few times by GLib internally before
the messaging system that g_error() requires is ready. Thanks to
Tim Janik for noticing. Just display a MessageBox() and abort()
instead.
2006-02-24 Matthias Clasen <mclasen@redhat.com> 2006-02-24 Matthias Clasen <mclasen@redhat.com>
* === Released 2.10.0 === * === Released 2.10.0 ===

View File

@ -44,6 +44,7 @@
#include <process.h> #include <process.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h>
#define win32_check_for_error(what) G_STMT_START{ \ #define win32_check_for_error(what) G_STMT_START{ \
if (!(what)) \ if (!(what)) \
@ -70,7 +71,7 @@ static GTryEnterCriticalSectionFunc try_enter_critical_section = NULL;
/* As noted in the docs, GPrivate is a limited resource, here we take /* As noted in the docs, GPrivate is a limited resource, here we take
* a rather low maximum to save memory, use GStaticPrivate instead. */ * a rather low maximum to save memory, use GStaticPrivate instead. */
#define G_PRIVATE_MAX 16 #define G_PRIVATE_MAX 100
static GDestroyNotify g_private_destructors[G_PRIVATE_MAX]; static GDestroyNotify g_private_destructors[G_PRIVATE_MAX];
@ -322,8 +323,16 @@ g_private_new_win32_impl (GDestroyNotify destructor)
GPrivate *result; GPrivate *result;
EnterCriticalSection (&g_thread_global_spinlock); EnterCriticalSection (&g_thread_global_spinlock);
if (g_private_next >= G_PRIVATE_MAX) if (g_private_next >= G_PRIVATE_MAX)
g_error ("Too many GPrivate allocated. Their number is limited to %d.\n" {
"Use GStaticPrivate instead.\n", G_PRIVATE_MAX); char buf[100];
sprintf (buf,
"Too many GPrivate allocated. Their number is limited to %d.",
G_PRIVATE_MAX);
MessageBox (NULL, buf, NULL, MB_ICONERROR|MB_SETFOREGROUND);
if (IsDebuggerPresent ())
G_BREAKPOINT ();
abort ();
}
g_private_destructors[g_private_next] = destructor; g_private_destructors[g_private_next] = destructor;
result = GUINT_TO_POINTER (g_private_next); result = GUINT_TO_POINTER (g_private_next);
g_private_next++; g_private_next++;