+2002-02-21 Matthias Clasen <maclas@gmx.de>
+
+ * glib/gdebug.h: New header containing GTK_DEBUG-style debugging
+ support for GLib. Currently only the fatal_warnings debug option exists.
+
+ * glib/gmessages.c (g_log_msg_prefix_init): New one-shot function
+ for parsing G_MESSAGES_PREFIXED.
+ (_g_debug_init): New one-shot function for parsing G_DEBUG.
+ (g_log_write_prefix): Use g_log_msg_prefix_init().
+ (g_messages_init): Use g_log_msg_prefix_init() and _g_debug_init().
+
+ * glib/Makefile.am (libglib_1_3_la_SOURCES): Add gdebug.h.
+
Wed Feb 20 22:35:42 2002 Owen Taylor <otaylor@redhat.com>
Fixes from Miroslaw Dobrzanski-Neumann (#71963)
+2002-02-21 Matthias Clasen <maclas@gmx.de>
+
+ * glib/gdebug.h: New header containing GTK_DEBUG-style debugging
+ support for GLib. Currently only the fatal_warnings debug option exists.
+
+ * glib/gmessages.c (g_log_msg_prefix_init): New one-shot function
+ for parsing G_MESSAGES_PREFIXED.
+ (_g_debug_init): New one-shot function for parsing G_DEBUG.
+ (g_log_write_prefix): Use g_log_msg_prefix_init().
+ (g_messages_init): Use g_log_msg_prefix_init() and _g_debug_init().
+
+ * glib/Makefile.am (libglib_1_3_la_SOURCES): Add gdebug.h.
+
Wed Feb 20 22:35:42 2002 Owen Taylor <otaylor@redhat.com>
Fixes from Miroslaw Dobrzanski-Neumann (#71963)
+2002-02-21 Matthias Clasen <maclas@gmx.de>
+
+ * glib/gdebug.h: New header containing GTK_DEBUG-style debugging
+ support for GLib. Currently only the fatal_warnings debug option exists.
+
+ * glib/gmessages.c (g_log_msg_prefix_init): New one-shot function
+ for parsing G_MESSAGES_PREFIXED.
+ (_g_debug_init): New one-shot function for parsing G_DEBUG.
+ (g_log_write_prefix): Use g_log_msg_prefix_init().
+ (g_messages_init): Use g_log_msg_prefix_init() and _g_debug_init().
+
+ * glib/Makefile.am (libglib_1_3_la_SOURCES): Add gdebug.h.
+
Wed Feb 20 22:35:42 2002 Owen Taylor <otaylor@redhat.com>
Fixes from Miroslaw Dobrzanski-Neumann (#71963)
+2002-02-21 Matthias Clasen <maclas@gmx.de>
+
+ * glib/gdebug.h: New header containing GTK_DEBUG-style debugging
+ support for GLib. Currently only the fatal_warnings debug option exists.
+
+ * glib/gmessages.c (g_log_msg_prefix_init): New one-shot function
+ for parsing G_MESSAGES_PREFIXED.
+ (_g_debug_init): New one-shot function for parsing G_DEBUG.
+ (g_log_write_prefix): Use g_log_msg_prefix_init().
+ (g_messages_init): Use g_log_msg_prefix_init() and _g_debug_init().
+
+ * glib/Makefile.am (libglib_1_3_la_SOURCES): Add gdebug.h.
+
Wed Feb 20 22:35:42 2002 Owen Taylor <otaylor@redhat.com>
Fixes from Miroslaw Dobrzanski-Neumann (#71963)
+2002-02-21 Matthias Clasen <maclas@gmx.de>
+
+ * glib/gdebug.h: New header containing GTK_DEBUG-style debugging
+ support for GLib. Currently only the fatal_warnings debug option exists.
+
+ * glib/gmessages.c (g_log_msg_prefix_init): New one-shot function
+ for parsing G_MESSAGES_PREFIXED.
+ (_g_debug_init): New one-shot function for parsing G_DEBUG.
+ (g_log_write_prefix): Use g_log_msg_prefix_init().
+ (g_messages_init): Use g_log_msg_prefix_init() and _g_debug_init().
+
+ * glib/Makefile.am (libglib_1_3_la_SOURCES): Add gdebug.h.
+
Wed Feb 20 22:35:42 2002 Owen Taylor <otaylor@redhat.com>
Fixes from Miroslaw Dobrzanski-Neumann (#71963)
+2002-02-21 Matthias Clasen <maclas@gmx.de>
+
+ * glib/gdebug.h: New header containing GTK_DEBUG-style debugging
+ support for GLib. Currently only the fatal_warnings debug option exists.
+
+ * glib/gmessages.c (g_log_msg_prefix_init): New one-shot function
+ for parsing G_MESSAGES_PREFIXED.
+ (_g_debug_init): New one-shot function for parsing G_DEBUG.
+ (g_log_write_prefix): Use g_log_msg_prefix_init().
+ (g_messages_init): Use g_log_msg_prefix_init() and _g_debug_init().
+
+ * glib/Makefile.am (libglib_1_3_la_SOURCES): Add gdebug.h.
+
Wed Feb 20 22:35:42 2002 Owen Taylor <otaylor@redhat.com>
Fixes from Miroslaw Dobrzanski-Neumann (#71963)
+2002-02-21 Matthias Clasen <maclas@gmx.de>
+
+ * glib/gdebug.h: New header containing GTK_DEBUG-style debugging
+ support for GLib. Currently only the fatal_warnings debug option exists.
+
+ * glib/gmessages.c (g_log_msg_prefix_init): New one-shot function
+ for parsing G_MESSAGES_PREFIXED.
+ (_g_debug_init): New one-shot function for parsing G_DEBUG.
+ (g_log_write_prefix): Use g_log_msg_prefix_init().
+ (g_messages_init): Use g_log_msg_prefix_init() and _g_debug_init().
+
+ * glib/Makefile.am (libglib_1_3_la_SOURCES): Add gdebug.h.
+
Wed Feb 20 22:35:42 2002 Owen Taylor <otaylor@redhat.com>
Fixes from Miroslaw Dobrzanski-Neumann (#71963)
+2002-02-21 Matthias Clasen <maclas@gmx.de>
+
+ * glib/gdebug.h: New header containing GTK_DEBUG-style debugging
+ support for GLib. Currently only the fatal_warnings debug option exists.
+
+ * glib/gmessages.c (g_log_msg_prefix_init): New one-shot function
+ for parsing G_MESSAGES_PREFIXED.
+ (_g_debug_init): New one-shot function for parsing G_DEBUG.
+ (g_log_write_prefix): Use g_log_msg_prefix_init().
+ (g_messages_init): Use g_log_msg_prefix_init() and _g_debug_init().
+
+ * glib/Makefile.am (libglib_1_3_la_SOURCES): Add gdebug.h.
+
Wed Feb 20 22:35:42 2002 Owen Taylor <otaylor@redhat.com>
Fixes from Miroslaw Dobrzanski-Neumann (#71963)
+2002-02-21 Matthias Clasen <maclas@gmx.de>
+
+ * glib/Makefile.am (IGNORE_HFILES): Add gdebug.h.
+
+ * glib/running.sgml: Document the G_DEBUG environment variable.
+
+ * glib/tmpl/threads.sgml: Replace g_thread_wait() by
+ g_thread_join() in two places.
+
2002-02-20 Sven Neumann <sven@gimp.org>
* gobject/gobject-sections.txt
gunicomp.h \
gunidecomp.h \
gunichartables.h \
- glibconfig-sysdefs.h
+ glibconfig-sysdefs.h \
+ gdebug.h
# Extra files to add when scanning
EXTRA_HFILES=
<para>
A list of log levels for which messages should be prefixed by the
program name and PID of the application. The default is to prefix
- everything except %G_LOG_LEVEL_MESSAGE and %G_LOG_LEVEL_INFO.
+ everything except <literal>G_LOG_LEVEL_MESSAGE</literal> and <literal>G_LOG_LEVEL_INFO</literal>.
+ </para>
+</formalpara>
+
+<formalpara>
+ <title><envar>G_DEBUG</envar></title>
+
+ <para>
+ If GLib has been configured with <option>--enable-debug=yes</option>,
+ this variable can be set to a list of debug options, which cause GLib
+ to print out different types of debugging information.
+ <variablelist>
+ <varlistentry>
+ <term>fatal_warnings</term>
+ <listitem><para>Causes GLib to abort the program at the first call
+ to <link linkend="g-warning">g_warning</link>(). This option is
+ special in that it doesn't require GLib to be configured with
+ debugging support.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
</para>
</formalpara>
static volatile gulong g_trap_realloc_size;
static volatile gulong g_trap_malloc_size;
</programlisting>
-If set to a size > 0, <link linkend="g-free">g_free()</link>,
-<link linkend="g-realloc">g_realloc()</link> and
-<link linkend="g-malloc">g_malloc()</link> will be intercepted if the size
+If set to a size > 0, <link linkend="g-free">g_free</link>(),
+<link linkend="g-realloc">g_realloc</link>() and
+<link linkend="g-malloc">g_malloc</link>() will be intercepted if the size
matches the size of the corresponding memory block. This will only work with
<literal>g_mem_set_vtable (glib_mem_profiler_table)</literal> upon startup
though, because memory profiling is required to match on the memory block sizes.
<para>
If @joinable is %TRUE, you can wait for this threads termination
-calling g_thread_wait(). Otherwise the thread will just disappear, when
+calling g_thread_join(). Otherwise the thread will just disappear, when
ready.
</para>
<para>
If @joinable is %TRUE, you can wait for this threads termination
-calling g_thread_wait(). Otherwise the thread will just disappear, when
+calling g_thread_join(). Otherwise the thread will just disappear, when
ready. If @bound is %TRUE, this thread will be scheduled in the system
scope, otherwise the implementation is free to do scheduling in the
process scope. The first variant is more expensive resource-wise, but
gunicomp.h \
gunidecomp.h \
gunidecomp.c \
- gutils.c
+ gutils.c \
+ gdebug.h
EXTRA_libglib_1_3_la_SOURCES = \
giounix.c \
--- /dev/null
+/* GLIB - Library of useful routines for C programming
+ * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * Modified by the GLib Team and others 1997-2000. See the AUTHORS
+ * file for a list of people on the GLib Team. See the ChangeLog
+ * files for a list of changes. These files are distributed with
+ * GTK+ at ftp://ftp.gtk.org/pub/gtk/.
+ */
+
+#ifndef __G_DEBUG_H__
+#define __G_DEBUG_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+typedef enum {
+ G_DEBUG_FATAL_WARNINGS = 1 << 0,
+} GDebugFlag;
+
+
+#ifdef G_ENABLE_DEBUG
+
+#define G_NOTE(type, action) G_STMT_START { \
+ if (!_g_debug_initialized) \
+ { _g_debug_init (); } \
+ if (_g_debug_flags & G_DEBUG_##type) \
+ { action; }; } G_STMT_END
+
+#else /* !G_ENABLE_DEBUG */
+
+#define G_NOTE(type, action)
+
+#endif /* G_ENABLE_DEBUG */
+
+GLIB_VAR gboolean _g_debug_initialized;
+GLIB_VAR guint _g_debug_flags;
+
+void _g_debug_init ();
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+
+#endif /* __G_DEBUG_H__ */
#include <signal.h>
#include <locale.h>
#include <errno.h>
+#include "gdebug.h"
#ifdef G_OS_WIN32
typedef FILE* GFileDescriptor;
write (fd, string, strlen (string));
}
+static GLogLevelFlags g_log_msg_prefix = G_LOG_LEVEL_ERROR | G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_DEBUG;
+
+static inline void
+g_log_msg_prefix_init ()
+{
+ static gboolean initialized = FALSE;
+ const gchar *val;
+
+ if (!initialized) {
+
+ initialized = TRUE;
+ val = g_getenv ("G_MESSAGES_PREFIXED");
+
+ if (val)
+ {
+ static const GDebugKey keys[] = {
+ { "error", G_LOG_LEVEL_ERROR },
+ { "critical", G_LOG_LEVEL_CRITICAL },
+ { "warning", G_LOG_LEVEL_WARNING },
+ { "message", G_LOG_LEVEL_MESSAGE },
+ { "info", G_LOG_LEVEL_INFO },
+ { "debug", G_LOG_LEVEL_DEBUG }
+ };
+
+ g_log_msg_prefix = g_parse_debug_string (val, keys, G_N_ELEMENTS (keys));
+ }
+ }
+}
+
static void
g_log_write_prefix (GFileDescriptor fd,
GLogLevelFlags mask)
{
- static GLogLevelFlags g_log_msg_prefix = G_LOG_LEVEL_ERROR | G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_DEBUG;
- static gboolean initialized = FALSE;
-
- g_mutex_lock (g_messages_lock);
-
- if (!initialized)
- {
- const gchar *val;
- initialized = TRUE;
-
- val = g_getenv ("G_MESSAGES_PREFIXED");
-
- if (val)
- {
- static const GDebugKey keys[] = {
- { "error", G_LOG_LEVEL_ERROR },
- { "critical", G_LOG_LEVEL_CRITICAL },
- { "warning", G_LOG_LEVEL_WARNING },
- { "message", G_LOG_LEVEL_MESSAGE },
- { "info", G_LOG_LEVEL_INFO },
- { "debug", G_LOG_LEVEL_DEBUG }
- };
-
- g_log_msg_prefix = g_parse_debug_string (val, keys, G_N_ELEMENTS (keys));
- }
- }
-
- g_mutex_unlock (g_messages_lock);
+ g_log_msg_prefix_init ();
if ((g_log_msg_prefix & mask) == mask)
{
va_end (args2);
#endif /* !HAVE_VSNPRINTF */
+ if (!_g_debug_initialized)
+ _g_debug_init ();
+
for (i = g_bit_nth_msf (log_level, -1); i >= 0; i = g_bit_nth_msf (log_level, i))
{
register GLogLevelFlags test_level;
void
g_messages_init (void)
{
- g_messages_lock = g_mutex_new();
- g_log_depth = g_private_new(NULL);
+ g_messages_lock = g_mutex_new ();
+ g_log_depth = g_private_new (NULL);
+ g_log_msg_prefix_init ();
+ _g_debug_init ();
+}
+
+gboolean _g_debug_initialized = FALSE;
+guint _g_debug_flags = 0;
+
+void _g_debug_init ()
+{
+ const gchar *val;
+
+ _g_debug_initialized = TRUE;
+
+ val = g_getenv ("G_DEBUG");
+ if (val != NULL)
+ {
+ static const GDebugKey keys[] = {
+ {"fatal_warnings", G_DEBUG_FATAL_WARNINGS}
+ };
+
+ _g_debug_flags = g_parse_debug_string (val, keys, G_N_ELEMENTS (keys));
+ }
+
+ if (_g_debug_flags & G_DEBUG_FATAL_WARNINGS)
+ {
+ GLogLevelFlags fatal_mask;
+
+ fatal_mask = g_log_set_always_fatal (G_LOG_FATAL_MASK);
+ fatal_mask |= G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL;
+ g_log_set_always_fatal (fatal_mask);
+ }
}