Commit Graph

45 Commits

Author SHA1 Message Date
Dan Winship
e56498ee0b Fix usage of _GNU_SOURCE
_GNU_SOURCE must be defined before including any other (system)
header, so defining it in glib-unix.h (and hoping no one has included
anything else before that) is wrong. And the "#define _USE_GNU"
workaround for this problem in gnetworkingprivate.h is even wronger
(and still prone to failure anyway due to single-include guards).

Fix this by defining _GNU_SOURCE in config.h when building against
glibc. In theory this is bad because new releases of glibc may include
symbols that conflict with glib symbols, which could then cause
compile failures. However, most people only see new releases of glibc
when they upgrade their distro, at which point they also generally get
new releases of gcc, which have new warnings/errors to clean up
anyway.

https://bugzilla.gnome.org/show_bug.cgi?id=649201
2011-05-03 07:07:41 -04:00
Tor Lillqvist
548ddd5fe9 Fix build on Windows and possibly other non-Linux platforms
Include glibconfig.h in files that test G_OS_WIN32. Include headers
for GLib APIs used conditionally where needed.
2010-09-06 15:57:32 +03:00
Emmanuele Bassi
959886d95e build: Fix warnings caused by missing includes 2010-09-06 11:43:04 +01:00
Matthias Clasen
f13d561211 More header inclusion cleanup 2010-09-05 00:23:03 -04:00
Ryan Lortie
2e53e50244 glib/: fully remove galias hacks 2010-07-07 19:34:35 -04:00
Alexander Larsson
bef9efd0a9 Initial support for dtrace and systemtap
This adds static markers for dtrace, which are also usable
by systemtap. Additionally it adds a tapset for systemtap
that makes it easier to use the static markers.

These are enabled by default.

This initial set of probes is rather limited:

* allocation and free using g_malloc & co
* allocation and free using g_slice
* gquark name tracking (useful for converting quarks to strings in probes)

Notes on naming:

Its traditional with dtrace to use probe names with dashes as
delimiter (slice-alloc). Since dashes are not usable in identifiers
the C code uses double underscores (slice__alloc) which is converted
to dashes in the UI. We follow this for the shared lowlevel probe
names.

Additionally dtrace supports putting a "provider" part in the probe
names which is essentially a namespacing thing. On systemtap this
field is currently ignored (but may be implemented in the future), but
this is not really a problem since in systemtap the probes are
specified by combining the solib file and the marker name, so there
can't really be name conflicts.

For the systemtap tapset highlevel probes we instead use names that
are systemtapish with single dashes as separators.

https://bugzilla.gnome.org/show_bug.cgi?id=606044
2010-05-27 14:51:41 -04:00
Ryan Lortie
b9d728474e Remove redudant check for direct #include gslice.h
This was added before we had a standardised header check and not removed
when the standard check was added.
2010-02-22 00:35:45 -05:00
Ryan Lortie
c8fc3112f9 Bug 448888 - don't init g_slice for always-malloc 2010-01-22 20:18:58 -05:00
Tor Lillqvist
440ebdec6f Use G_GSIZE_FORMAT instead of the C99 "zu".
2008-07-24  Tor Lillqvist  <tml@novell.com>

	* glib/gslice.c (smc_notify_free): Use G_GSIZE_FORMAT instead of
	the C99 "zu".


svn path=/trunk/; revision=7249
2008-07-24 00:50:08 +00:00
Matthias Clasen
f37b73fb95 Avoid a warning when printing a pid_t. Pointed out by Morten Welinder.
* glib/gslice.c (mem_error): Avoid a warning when printing a pid_t.
        Pointed out by Morten Welinder.


svn path=/trunk/; revision=7196
2008-07-16 23:12:00 +00:00
Matthias Clasen
9a1cf274de Remove C99 comments
svn path=/trunk/; revision=6227
2008-01-01 04:13:26 +00:00
Michael Natterer
8a442ede82 make g_slice_copy() take a gconstpointer instead of a gpointer.
2007-08-24  Michael Natterer  <mitch@imendio.com>

	* glib/gslice.[ch]: make g_slice_copy() take a gconstpointer
	instead of a gpointer.


svn path=/trunk/; revision=5720
2007-08-24 14:40:14 +00:00
Tor Lillqvist
6b5e23435a Revert my earlier change, see #440544.
svn path=/trunk/; revision=5680
2007-08-06 15:40:48 +00:00
Tor Lillqvist
faaaa24885 Move the G_ENABLE_DEBUG ifdef inside g_slice_debug_tree_statistics() so
2007-08-06  Tor Lillqvist  <tml@novell.com>

	* glib/gslice.c: Move the G_ENABLE_DEBUG ifdef inside
	g_slice_debug_tree_statistics() so that the function exists (but
	doesn't do anything) also in a non-debug build. (#440544)


svn path=/trunk/; revision=5679
2007-08-06 14:23:54 +00:00
Tim Janik
964d75ebe3 migrate per-thread magazine caches from single-thread scenario to first
Thu Jul 12 15:46:40 2007  Tim Janik  <timj@imendio.com>

        * glib/gslice.c: migrate per-thread magazine caches from single-thread
        scenario to first thread using GSlice after g_thread_init(); based on
        a patch by Tor Lillqvist, fixes #331853.
        removed warning about g_thread_init() being called after other glib
        functions (in particular g_slice* calls), because GSlice can cope
        with this now and the rest of glib is believed to cope as well.

        * tests/slice-threadinit.c: new test program which tests GSlice working
        across g_thread_init() calls.



svn path=/trunk/; revision=5629
2007-07-12 15:07:52 +00:00
Sven Neumann
57336cec3f glib/gslice.[ch] added g_slice_copy() and g_slice_dup() (#442029).
2007-06-13  Sven Neumann  <sven@gimp.org>

	* glib/gslice.[ch] added g_slice_copy() and g_slice_dup() 
(#442029).

	* glib/glib.symbols: updated.


svn path=/trunk/; revision=5554
2007-06-13 18:56:51 +00:00
Matthias Clasen
a061009f52 Make g_slice_debug_tree_statistics() debug-only functionality again.
2007-05-14  Matthias Clasen  <mclasen@redhat.com>

        * glib/gslice.h:
        * glib/gslice.c:
        * glib/glib.symbols: Make g_slice_debug_tree_statistics()
        debug-only functionality again.


svn path=/trunk/; revision=5492
2007-05-15 03:32:29 +00:00
Matthias Clasen
6a6d92a218 Don't make ABI depend on G_ENABLE_DEBUG, just add an empty
2007-01-30  Matthias Clasen <mclasen@redhat.com>

        * glib/glib.symbols:
        * glib/gslice.h:
        * glib/gslice.c: Don't make ABI depend on G_ENABLE_DEBUG,
        just add an empty g_slice_debug_tree_statistics () implementation
        in the !G_ENABLE_DEBUG case.



svn path=/trunk/; revision=5318
2007-01-30 18:12:28 +00:00
Matthias Clasen
f90d6d821d Make some structs which are used only once non-static.
2007-01-26  Matthias Clasen <mclasen@redhat.com>

        * gmem.c:
        * gslice.c:
        * gmessages.c:
        * gutils.c: Make some structs which are used only once
        non-static.

svn path=/trunk/; revision=5316
2007-01-26 20:59:54 +00:00
Matthias Clasen
e319147a9e Fix some C99isms. (#390913, Kazuki Iwamoto)
2006-12-31  Matthias Clasen  <mclasen@redhat.com>

        * glib/gslice.c: Fix some C99isms.  (#390913, Kazuki Iwamoto)



svn path=/trunk/; revision=5183
2006-12-31 16:27:45 +00:00
Tim Janik
0f9cf7898b turned detection of too late g_thread_init() calls into a warning. this is
Fri Dec 29 13:28:07 2006  Tim Janik  <timj@imendio.com>

        * glib/gslice.c: turned detection of too late g_thread_init() calls
        into a warning. this is a temporary work-around for some head-room
        to fix affected programs, memory corruption still occours regardless.
2006-12-29 12:29:55 +00:00
Tim Janik
5fef9365d8 removed pthread-dependant debugging bits, the code was already converted
Thu Dec 28 21:14:45 2006  Tim Janik  <timj@imendio.com>

        * glib/gslice.c: removed pthread-dependant debugging bits, the code
        was already converted to GMutex. this obsoletes Tor's recent fixups.
2006-12-28 20:15:35 +00:00
Tor Lillqvist
b5e5d38ce7 Call InitializeCriticalSection() on the sdt_mutex in
2006-12-28  Tor Lillqvist  <tml@novell.com>

	* glib/gslice.c: Call InitializeCriticalSection() on the
	sdt_mutex in g_slice_init_nomessage() and not in
	_g_slice_thread_init_nomessage(), which is called only through
	g_thread_init(). Not all programs call g_thread_init().
2006-12-28 17:55:06 +00:00
Tor Lillqvist
b713fbc11a Make it compile on Win32 without pthreads: Use a Win32 critical section
2006-12-28  Tor Lillqvist  <tml@novell.com>

	* glib/gslice.c: Make it compile on Win32 without pthreads: Use a
	Win32 critical section instead.
2006-12-28 15:39:47 +00:00
Tim Janik
1bd8993451 implemented static debugging hash-tree to validate slice adresses and
Thu Dec 28 12:50:31 2006  Tim Janik  <timj@imendio.com>

        * glib/gslice.h, glib/gslice.c: implemented static debugging
        hash-tree to validate slice adresses and sizes with G_SLICE=debug-blocks.
        use abort() to exit in mem_error() to allow catching of these in gdb.
        abort programs with a descriptive error message if g_thread_init() is
        called after GSlice was in use. previously this just silently corrupted
        the magazines.

        * glib/ghash.c (struct _GHashNode): reordered fields to keep 8-byte
        pointer alignment on 64bit systems and request smaller slice sizes
        on 32bit systems.

        * tests/slice-test.c: support '~' option flag to introduce slice
        allocation/release corruption with a significant probability. this
        allowes testing of G_SLICE=debug-blocks.
2006-12-28 11:50:43 +00:00
Matthias Clasen
48876d7fb5 Fix PLT issues 2006-09-30 14:06:45 +00:00
Sebastian Wilhelmi
e4f8f3b95c Renamed to glib/gthreadprivate.h and moved system thread identifier
2006-05-09  Sebastian Wilhelmi  <wilhelmi@google.com>

	* glib/gthreadinit.h: Renamed to glib/gthreadprivate.h and moved
	system thread identifier comparision and assignment macros from
	glib/gthread.c to glib/gthreadprivate.h.

	* glib/Makefile.am, glib/gatomic.c, glib/gconvert.c, glib/gmain.c,
	glib/gmem.c, glib/gmessages.c, glib/grand.c, glib/gslice.c,
	glib/gthread.c, glib/gutils.c, gthread/gthread-impl.c: Use
	glib/gthreadprivate.h instead of glib/gthreadinit.h.

	* gthread/gthread-impl.c: Use GSystemThread instead of GThread for
	owner determination. This fixes #311043 and is mostly modeled
	after the patch from jylefort@FreeBSD.org.
2006-05-10 00:44:50 +00:00
Tim Janik
8a8f185feb only define _XOPEN_SOURCE to 600 to get at posix_memalign() in case we
Tue Feb 14 17:00:43 2006  Tim Janik  <timj@imendio.com>

        * glib/gslice.c: only define _XOPEN_SOURCE to 600 to get at
        posix_memalign() in case we actually are going to use it, because
        we detected a compliant implementation (#328997).

        * configure.in (enable_included_printf): don't include malloc.h when
        testing for posix_memalign() funcitonality, since this may break the
        test on some systems (#328997).
2006-02-14 16:31:37 +00:00
Tim Janik
bd88bf87da fixed buglets reported by Jens Granseuer in #328254.
Wed Jan 25 19:16:57 2006  Tim Janik  <timj@imendio.com>

        * fixed buglets reported by Jens Granseuer in #328254.

        * configure.in: free the memory allocated in posix_memalign() tests.

        * glib/gslice.c: spelling fixes.
2006-01-25 18:20:28 +00:00
Tim Janik
eda944bca5 honour g_mem_gc_friendly settings when freeing slices, make sure
Wed Jan 25 16:39:18 2006  Tim Janik  <timj@imendio.com>

        * glib/gslice.c: honour g_mem_gc_friendly settings when freeing
        slices, make sure g_mem_gc_friendly is properly initialized.

        * gmem.[hc]: ensure g_mem_gc_friendly is initialized from G_DEBUG upon
        the first allocation. applied some branching optimizations.

        * docs/macros.txt: reflected --enable-gc-friendly change and
        described ENABLE_GC_FRIENDLY_DEFAULT as well as G_DEBUG=gc-friendly.

        * configure.in: changed --enable-gc-friendly=yes to define
        ENABLE_GC_FRIENDLY_DEFAULT.

        * glib/garray.c: changed ENABLE_GC_FRIENDLY macro #ifdef-s to
        if (G_UNLIKELY (g_mem_gc_friendly)).

        * glib/gtree.c:
        * glib/ghash.c: removed ENABLE_GC_FRIENDLY code which is now taken
        care of by g_slice_free1().

        * tests/slice-test.c: fixed leaks, reported by Kjartan Maraas.
2006-01-25 15:51:43 +00:00
Tim Janik
7b744cf4d2 only use posix_memalign() if it's known to work, revert to memalign()
Tue Jan 24 17:49:36 2006  Tim Janik  <timj@imendio.com>

        * glib/gslice.c: only use posix_memalign() if it's known to work,
        revert to memalign() otherwise.

        * configure.in: check for broken posix_memalign() implementations
        to fix #328254.
2006-01-24 16:56:17 +00:00
Tim Janik
75db578288 initialize GSlice config from G_SLICE environemtn variable. we support
Mon Jan 23 16:46:20 2006  Tim Janik  <timj@imendio.com>

        * glib/gslice.c (slice_config_init): initialize GSlice config from
        G_SLICE environemtn variable. we support G_SLICE=always-malloc
        currently, which forces all g_slice_*() allocations to use the system
        malloc instead.

        * glib/gutils.c:
        g_parse_debug_string(): added a note about not using g_malloc() here.
        _g_getenv_nomalloc(): getenv() variant that doesn't use g_malloc or
        g_slice. contains only guesswork in the WIN32 branch.
2006-01-23 15:51:06 +00:00
Matthias Clasen
0f3dfbfc86 Include config.h first 2006-01-08 23:21:01 +00:00
Matthias Clasen
4a71102e70 Fix a build problem on OS X. 2006-01-06 05:50:40 +00:00
Tim Janik
f2613bf9ed don't reverse chunk order when creating magazines, so we hand out chunks
Wed Jan  4 13:33:25 2006  Tim Janik  <timj@gtk.org>

        * glib/gslice.c (magazine_cache_pop_magazine): don't reverse chunk
        order when creating magazines, so we hand out chunks with ascending
        adresses.
2006-01-04 13:03:22 +00:00
Matthias Clasen
d947ad7167 Partial fix for bug #32937, Bogdan Nicula.
2005-12-27  Matthias Clasen  <mclasen@redhat.com>

        Partial fix for bug #32937, Bogdan Nicula.

        * configure.in: Check for malloc.h
        * glib/gslice.c: Don't include malloc.h unconditionally.
2005-12-27 19:15:12 +00:00
Matthias Clasen
8ade96bdce On Win32, include process.h (#325015, Kazuki Iwamoto)
2005-12-26  Matthias Clasen  <mclasen@redhat.com>

	* glib/gslice.c: On Win32, include process.h  (#325015, Kazuki
	Iwamoto)
2005-12-26 23:18:09 +00:00
Tim Janik
3f9d65375e added mem_error() and mem_assert() to test and handle errors without
Tue Dec 20 18:14:14 2005  Tim Janik  <timj@imendio.com>

        * glib/gslice.[hc]: added mem_error() and mem_assert() to test and
        handle  errors without depending on gmessage.c which might not be
        setup when the error occours.
        removed G_SLICE_CONFIG_ALWAYS_FREE config option, fixed the code so
        always freeing can be achieved by adjusting the working set time to
        0 with G_SLICE_CONFIG_WORKING_SET_MSECS.
        added G_SLICE_CONFIG_COLOR_INCREMENT to test different color increments
        (mainly 0 and 1). reduced the minimum block size to 128 bytes, to
        minimize wastage if small amounts of differently sized structrues are
        allocated, this does come at a performance cost of roughly 5% though.
        fixed up block alignment calculation, so it works for varying
        block sizes. only use strerror() not g_strerror() since the latter
        depends on working GQuark and GSlice.
        mem_error(): implemented in terms of fprintf and vfprintf.

        * tests/slice-color.c: new program to test cache colorization effects.

        * tests/slice-test.c: trade G_SLICE_CONFIG_ALWAYS_FREE for 0 duration
        G_SLICE_CONFIG_WORKING_SET_MSECS.
2005-12-20 17:35:02 +00:00
Tim Janik
c2584396e5 fix type inconsistency pointed out by gmorten 2005-12-09 16:34:26 +00:00
Tim Janik
6ed79b115c implement chain walking for arbitrary ->next pointer offsets in
Mon Dec  5 15:53:20 2005  Tim Janik  <timj@imendio.com>

        * glib/gslice.c: implement chain walking for arbitrary ->next pointer
        offsets in g_slice_free_chain_with_offset() based on a patch by behdad
        in bug 323178. moved time consuming logic from g_slice_free() out of
        the inner loop, so g_slice_free_chain_with_offset() provides a real
        performance benefit over g_slice_free1() now.

        * glib/gslice.h: renamed g_slice_free_chain() to
        g_slice_free_chain_with_offset(). implemented g_slice_free_chain() as
        a type-safe macro as suggested in bug 323178.
        simplified the macro implementation of g_slice_free() and implemented
        it in a type safe manner for all compliers as suggested by Morten
        Welinder <mortenw@gnome.org>.

        * glib/gmain.c:
        * glib/glist.c:
        * glib/gslist.c:
        * glib/glib.symbols: s/g_slice_free_chain/g_slice_free_chain_with_offset/
2005-12-05 15:01:27 +00:00
Matthias Clasen
ec2155a896 Portability fixes, C99ism removal 2005-12-02 20:11:28 +00:00
Tim Janik
bbb77c8d21 fix uint/pointer casts 2005-12-02 15:28:56 +00:00
Tim Janik
1e01f52ed4 some naming and type size fixups.
Fri Dec  2 16:18:09 2005  Tim Janik  <timj@imendio.com>

        * glib/gslice.c: some naming and type size fixups.
2005-12-02 15:18:39 +00:00
Tim Janik
2319431345 improved gettimeofday() timer resolution by maintaining acceptable load
Fri Dec  2 00:16:59 2005  Tim Janik  <timj@imendio.com>

        * glib/gslice.c: improved gettimeofday() timer resolution by maintaining
        acceptable load distribution of the syscall.
        (slab_allocator_free_chunk): reduce minimum/single-thread magazine sizes
        to approximately page_size/2.5 to avoid excessive startup allocations.
2005-12-01 23:20:22 +00:00
Tim Janik
733b1789c1 new slice allocator implementation.
Thu Dec  1 17:32:46 2005  Tim Janik  <timj@imendio.com>

        * glib/gslice.[hc]: new slice allocator implementation.

        * tests/slice-test.c: added random slice allocation test.

        * glib/gthread.[hc]: removed newly added private thread mem API.

        * glib/gthreadinit.h:
        * glib/gmessages.c:
        * glib/gthread.c:
        * glib/gmem.c: divided glib threading initialisation into three phases,
        initialisation where private keys and messaging are not available (only
        needed by gmem.c), initialisation without messaging but private keys
        available (gslice.c, gmessage.c), and full fledged initialisers that
        server the rest of glib. initialisation functions got renamed to reflect
        the limitations of their corresponding phases.

        * glib/gmem.c: removed memchunk code, defer allocations to
        g_slice_* instead.

        * glib/gmem.[hc]: removed g_slice_* skeletons.

        * glib/glib.symbols: added g_slice_* symbols.

        * configure.in: check for availability of posix_memalign(3), memalign(3)
        and valloc(3).

        * glib/Makefile.am: added gslice.[hc].
2005-12-01 16:34:33 +00:00