[prev in list] [next in list] [prev in thread] [next in thread] 

List:       gtk-devel
Subject:    Turning off the slice allocator
From:       Matthias Clasen <matthias.clasen () gmail ! com>
Date:       2006-01-20 20:52:16
Message-ID: cbccc63c0601201252k7d2a5d48oe9b3e677f638d4cd () mail ! gmail ! com
[Download RAW message or body]

Federico asked for this earlier, so I sat down and wrote a very
quick patch. It doesn't make everything in SliceConfig available via G_DEBUG,
just the always_malloc flag for now. Thats probably enough for most
people who want to turn off the slice allocator to debug memory overruns.

With the patch, you can do G_DEBUG=always_malloc foobar
to have foobar run without slice allocator. The patch currently
overrides a value set by g_slice_set_config().

Tim, do you think this is good enough ?

Matthias

["always_malloc.patch" (text/x-patch)]

Index: glib/gslice.c
===================================================================
RCS file: /cvs/gnome/glib/glib/gslice.c,v
retrieving revision 1.13
diff -u -r1.13 gslice.c
--- glib/gslice.c	8 Jan 2006 23:21:01 -0000	1.13
+++ glib/gslice.c	20 Jan 2006 20:40:50 -0000
@@ -30,6 +30,7 @@
 #include "gthreadinit.h"
 #include "galias.h"
 #include "glib.h"
+#include "gdebug.h"
 #ifdef HAVE_UNISTD_H
 #include <unistd.h>             /* sysconf() */
 #endif
@@ -273,6 +274,13 @@
 #endif
   mem_assert (sys_page_size >= 2 * LARGEALIGNMENT);
   mem_assert ((sys_page_size & (sys_page_size - 1)) == 0);
+  
+  if (!_g_debug_initialized)
+    _g_debug_init ();
+
+  if (_g_debug_flags & G_DEBUG_ALWAYS_MALLOC)
+    slice_config.always_malloc = TRUE;
+
   allocator->config = slice_config;
   allocator->min_page_size = sys_page_size;
 #if HAVE_POSIX_MEMALIGN || HAVE_MEMALIGN
Index: glib/gmessages.c
===================================================================
RCS file: /cvs/gnome/glib/glib/gmessages.c,v
retrieving revision 1.76
diff -u -r1.76 gmessages.c
--- glib/gmessages.c	1 Dec 2005 16:34:23 -0000	1.76
+++ glib/gmessages.c	20 Jan 2006 20:40:50 -0000
@@ -1063,8 +1063,9 @@
   if (val != NULL)
     {
       static const GDebugKey keys[] = {
-	{"fatal_warnings", G_DEBUG_FATAL_WARNINGS},
-	{"fatal_criticals", G_DEBUG_FATAL_CRITICALS}
+	{ "fatal_warnings",  G_DEBUG_FATAL_WARNINGS  },
+	{ "fatal_criticals", G_DEBUG_FATAL_CRITICALS },
+	{ "always_malloc",   G_DEBUG_ALWAYS_MALLOC   }
       };
       
       _g_debug_flags = g_parse_debug_string (val, keys, G_N_ELEMENTS (keys));
Index: glib/gdebug.h
===================================================================
RCS file: /cvs/gnome/glib/glib/gdebug.h,v
retrieving revision 1.6
diff -u -r1.6 gdebug.h
--- glib/gdebug.h	4 Nov 2005 19:05:30 -0000	1.6
+++ glib/gdebug.h	20 Jan 2006 20:40:50 -0000
@@ -31,7 +31,8 @@
 
 typedef enum {
   G_DEBUG_FATAL_WARNINGS  = 1 << 0,
-  G_DEBUG_FATAL_CRITICALS = 1 << 1
+  G_DEBUG_FATAL_CRITICALS = 1 << 1,
+  G_DEBUG_ALWAYS_MALLOC   = 1 << 2
 } GDebugFlag;
 
 



_______________________________________________
gtk-devel-list mailing list
gtk-devel-list@gnome.org
http://mail.gnome.org/mailman/listinfo/gtk-devel-list


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic