199 Commits

Author SHA1 Message Date
Ryan Lortie
6c0dda8265 make g_thread_init_glib() idempotent 2011-09-09 12:47:40 -04:00
Ryan Lortie
cfa1d0540e Move the GThread implementations to glib/
We can now get threads initialised from inside of libglib by calling
g_thread_init_glib().
2011-09-09 12:47:40 -04:00
Ryan Lortie
e48573c402 Deprecated (undocumented) g_thread_gettime
g_thread_gettime() is an undocumented public function pointer that
points to a function that returns the monotonic time in nanoseconds.
g_get_monotonic_time() does the same in microseconds, so it can be used
instead.

GLib had one internal user in GFileMonitor that only cared about
millisecond accuracy; it has been ported to g_get_monotonic_time().
2011-09-09 12:47:39 -04:00
Dan Winship
5bc7729d16 Make threads mandatory
G_THREADS_ENABLED still exists, but is always defined. It is still
possible to use libglib without threads, but gobject (and everything
above it) is now guaranteed to be using threads (as, in fact, it was
before, since it was accidentally impossible to compile with
--disable-threads).

https://bugzilla.gnome.org/show_bug.cgi?id=616754
2011-09-09 12:41:55 -04:00
Matthias Clasen
1b28408b8b Spelling fixes
Spelling fixes in comments and docs, provided by
Kjartan Maraas in bug 657336.
2011-08-29 14:49:32 -04:00
Ryan Lortie
79b8057928 Advise against using GPrivate
GStaticPrivate is really a lot better in almost every way.
2011-07-21 09:21:18 +02:00
Wim Taymans
496157ffd3 gthread: avoid locking in _get_mutex_impl
When getting the mutex implementation of a static mutex, avoid taking the global
lock every time but only take the lock when there was no mutex and we need to
create one.

https://bugzilla.gnome.org/show_bug.cgi?id=599954
2011-06-03 21:42:51 -04:00
Matthias Clasen
05c7dcab37 Remove unnecessary casts
The new atomic implementations don't need these anymore to
avoid warnings.
2011-05-28 18:42:09 -04:00
Ryan Lortie
8382135265 glib: Rewrite gatomic.[ch]
- remove all inline assembly versions

 - implement the atomic operations using either GCC intrinsics, the
   Windows interlocked API or a mutex-based fallback

 - drop gatomic-gcc.c since these are now defined in the header file.
   Adjust Makefile.am accordingly.

 - expand the set of operations: support 'get', 'set', 'compare and
   exchange', 'add', 'or', and 'xor' for both integers and pointers

 - deprecate g_atomic_int_exchange_and_add since g_atomic_int_add (as
   with all the new arithmetic operations) now returns the prior value

 - unify the use of macros: all functions are now wrapped in macros that
   perform the proper casts and checks

 - remove G_GNUC_MAY_ALIAS use; it was never required for the integer
   operations (since casting between pointers that only vary in
   signedness of the target is explicitly permitted) and we avoid the
   need for the pointer operations by using simple 'void *' instead of
   'gpointer *' (which caused the 'type-punned pointer' warning)

 - provide function implementations of g_atomic_int_inc and
   g_atomic_int_dec_and_test: these were strictly macros before

 - improve the documentation to make it very clear exactly which types
   of pointers these operations may be used with

 - remove a few uses of the now-deprecated g_atomic_int_exchange_and_add

 - drop initialisation of gatomic from gthread (by using a GStaticMutex
   instead of a GMutex)

 - update glib.symbols and documentation sections files

Closes #650823 and #650935
2011-05-28 16:10:44 -04:00
Matthias Clasen
ae85e3b7b6 Quell warnings from g_once_init_enter_impl 2011-05-28 13:59:20 -04:00
Matthias Clasen
f5bc2e00c7 Trivial: fix a variable name
It is indices, not indeces.
2011-05-28 13:57:47 -04:00
Simon McVittie
e83210425f GStaticPrivate: protect GRealThread.private_data with a bit-lock
Bug: https://bugzilla.gnome.org/show_bug.cgi?id=642026
Bug-NB: NB#257512
2011-05-28 10:00:41 -04:00
Simon McVittie
83f1b12388 Refactor GStaticPrivate accessors to facilitate protecting them with locks
* g_static_private_get: have a single entry and exit

* g_static_private_set: delay creation of GArray so the whole tail of
  the function can be under the private_data lock without risking
  deadlock with the g_thread lock; call the destructor last, after
  we could have unlocked

* g_static_private_free: choose next thread in list before accessing
  private_data, to keep all accesses together

* g_thread_cleanup: steal private_data first, then work exclusively with
  the stolen array (which doesn't need to be under a lock any more)

Bug: https://bugzilla.gnome.org/show_bug.cgi?id=642026
Bug-NB: NB#257512
2011-05-28 10:00:40 -04:00
Simon McVittie
b05f0b351c g_static_private_free: defer non-trivial destruction til after we unlock
Bug: https://bugzilla.gnome.org/show_bug.cgi?id=642026
Bug-NB: NB#257512
2011-05-28 10:00:40 -04:00
Simon McVittie
d5f0ec1e8e GRealThread: remove obsolete comment about gmain.c, which no longer has a copy
Bug: https://bugzilla.gnome.org/show_bug.cgi?id=642026
Bug-NB: NB#257512
2011-05-28 10:00:39 -04:00
Matthias Clasen
64d5a0404a GThread: expand the docs
Mention newer addition to the thread support in the introduction:
bit locks and one-time initialization.
2011-05-27 20:22:20 -04:00
Murray Cumming
30fdc1a799 Docs: Changed can not to cannot. 2011-03-24 09:33:55 +01:00
Johan Dahlin
fdaaa22b58 Correct gtk-doc SECTION: syntax
g-ir-scanner does not allow a space between the : and the
section name.
2011-02-01 16:18:02 -02:00
Ryan Lortie
3a8ab85d96 rename configure.in to configure.ac 2010-07-13 11:59:16 -04:00
Ryan Lortie
2e53e50244 glib/: fully remove galias hacks 2010-07-07 19:34:35 -04:00
Javier Jardón
81e98c399e Clean Glib header #include issues: gthread 2010-05-06 17:42:09 +02:00
Christian Dywan
75b3bd99e1 Fix typo in introduction to threads in Glib 2010-02-01 12:37:23 +01:00
Ryan Lortie
d87712d3e6 Fix up gthread.c documentation
The last incomplete commit got pushed accidentally.  This finishes it up.
2010-01-30 21:55:03 -05:00
Ryan Lortie
6857767b86 move threads docs to .c 2010-01-30 13:30:00 -05:00
Ryan Lortie
669b0f2d6b Bug 548967 - 1 bit mutex lock
Add support for a mutex lock that consumes only one bit of storage
inside of an integer on systems that support futexes.  Futex is emulated
(at a higher cost) on systems that don't have it -- but only in the
contended case.
2010-01-28 12:40:46 -05:00
Matthias Clasen
bd02a9f778 Fix docs
svn path=/trunk/; revision=7933
2009-03-01 17:00:21 +00:00
Matthias Clasen
45fdc135b2 Add a necessary cast back. Pointed out by Kazuki Iwamoto.
* glib/gthread.c (g_once_init_leave): Add a necessary cast back.
        Pointed out by Kazuki Iwamoto.


svn path=/trunk/; revision=7895
2009-02-23 04:07:58 +00:00
Matthias Clasen
c8e37b63e7 Fix strict aliasing warnings and viiolations to make GLib and
GLib users buildable with gcc 4.4. Patch by Jakub Jelinek.

        * glib/gatomic.[hc]: Add G_GNUC_MAY_ALIAS to pointer arguments,
        fix macro versions to only operate on objects of the same size.

        * glib/gdataset.c:
        * glib/gthread.[hc]:
        * glib/gdatasetprivate.h: Remove unnecessary casts in
        g_atomic_pointer_get calls.


svn path=/trunk/; revision=7875
2009-02-17 16:14:39 +00:00
Matthias Clasen
0f6b25ca96 Fix some compiler warnings
svn path=/trunk/; revision=7755
2008-12-31 05:51:47 +00:00
Mike Kestner
8bed68813e Bug 560676 - function access for g_threads_supported
2008-12-18  Mike Kestner <mkestner@novell.com>

	Bug 560676 - function access for g_threads_supported

	* glib/gthreads.c (g_thread_get_initialized): new accessor for
	g_threads_supported macro.
	* glib/gthreads.h: add g_thread_get_initialized

svn path=/trunk/; revision=7752
2008-12-18 19:20:42 +00:00
Behdad Esfahbod
9df1f4fcc7 Fix warnings from sparse. (#487491, Kjartan Maraas)
2007-10-21  Behdad Esfahbod  <behdad@gnome.org>

        * glib/gdate.c (g_date_strftime):
        * glib/gmain.c (g_main_context_check):
        * glib/gregex.c (g_match_info_fetch_all), (g_regex_split_full):
        * glib/gthread.c (g_once_init_enter_impl), (g_once_init_leave):
        * glib/gthread.h:
        * glib/gutf8.c (g_utf16_to_utf8), (g_utf16_to_ucs4):
        * tests/errorcheck-mutex-test.c (lock_locked_mutex),
        (trylock_locked_mutex), (unlock_unlocked_mutex),
        (free_locked_mutex), (wait_on_unlocked_mutex),
        (wait_on_otherwise_locked_mutex), (timed_wait_on_unlocked_mutex),
        (timed_wait_on_otherwise_locked_mutex):
        Fix warnings from sparse. (#487491, Kjartan Maraas)


svn path=/trunk/; revision=5792
2007-10-21 17:01:29 +00:00
Tim Janik
d5c4370813 prevent race covered by g_once_init_enter(), by checking for previous
Tue Aug 14 02:06:10 2007  Tim Janik  <timj@imendio.com>

        * glib/gthread.c (g_once_init_enter_impl): prevent race covered
        by g_once_init_enter(), by checking for previous initializations
        before entering initialisation branch.

        * tests/onceinit.c: added multi-thread/multi-initializer stress test
        using unoptimized g_once_init_enter_impl().



svn path=/trunk/; revision=5701
2007-08-14 00:05:52 +00:00
Tim Janik
8aa559d72f prevent linking a freed GThread structure into global thread list in error
Mon Aug 13 14:18:22 2007  Tim Janik  <timj@imendio.com>

       * glib/gthread.c (g_thread_create_full): prevent linking a freed
       GThread structure into global thread list in error cases.



svn path=/trunk/; revision=5697
2007-08-13 12:18:55 +00:00
Tim Janik
95e5ffb695 more atomic ops pointer cast fixes. this time it'll work with atomic op
Fri Jul 13 01:01:46 2007  Tim Janik  <timj@imendio.com>

        * glib/gthread.[hc]: more atomic ops pointer cast fixes. this time it'll
        work with atomic op macros *and* atomic op functions.



svn path=/trunk/; revision=5638
2007-07-12 23:03:06 +00:00
Tim Janik
b1e888b60e fixed missing pointer casts when using atomic ops.
Fri Jul 13 00:50:40 2007  Tim Janik  <timj@imendio.com>

        * glib/gthread.[hc]: fixed missing pointer casts when using atomic ops.



svn path=/trunk/; revision=5637
2007-07-12 22:51:56 +00:00
Tim Janik
c9ccc828f1 implemented g_once_init_enter(), g_once_init_enter_impl() and
Tue Jul 10 12:24:35 2007  Tim Janik  <timj@imendio.com>

        * glib/gthread.[hc]: implemented g_once_init_enter(),
        g_once_init_enter_impl() and g_once_init_leave(), based on a patch by
        Antoine Tremblay, fixes #65041.
        adapted exported inline function mechanism from gutils.[hc] for inlining
        g_once_init_enter_impl() in gthread.[hc].



svn path=/trunk/; revision=5616
2007-07-10 10:30:36 +00:00
Sebastian Wilhelmi
16b4963816 Extended the comments on those functions, that are NOOPs, before
2007-06-15  Sebastian Wilhelmi  <wilhelmi@google.com>

	* docs/reference/glib/tmpl/threads.sgml: Extended the comments on
	those functions, that are NOOPs, before g_thread_init() has been
	called. (#447583)

	* glib/gthread.c (g_static_mutex_free): Clarified comment to
	remind myself, tha calling g_static_mutex_free() before
	g_thread_init() is safe.


svn path=/trunk/; revision=5567
2007-06-15 17:03:13 +00:00
Matthias Clasen
4bbde50716 Revert an accidental ABI break by moving gettime out of the
2007-01-16  Matthias Clasen  <mclasen@redhat.com>

        * glib/gthread.h:
        * glib/gthread.c:
        * glib/glib.symbols: Revert an accidental ABI break by
        moving gettime out of the GThreadFunctions struct and making
        it a separate variable.  (#397139, Joe Marcus Clarke)

        * gthread/*.c: Adapt.



svn path=/trunk/; revision=5279
2007-01-16 21:25:03 +00:00
Tor Lillqvist
098d17a4fc glib/gthread.c (gettime) GetSystemTimeAsFileTime() returns 100s of
2007-01-16  Tor Lillqvist  <tml@novell.com>

	* glib/gthread.c (gettime)
	* gthread-win32.c (g_gettime_win32_impl):
	GetSystemTimeAsFileTime() returns 100s of nanoseconds since 1601,
	so offset to Unix epoch (1970) and multiply by 100 to get
	nanoseconds which is what we want.


svn path=/trunk/; revision=5277
2007-01-16 13:57:05 +00:00
Tor Lillqvist
5d65767801 glib/gthread.c (gettime) GetSystemTimeAsFileTime() returns 100s of
2007-01-16  Tor Lillqvist  <tml@novell.com>

	* glib/gthread.c (gettime)
	* gthread-win32.c (g_gettime_win32_impl):
	GetSystemTimeAsFileTime() returns 100s of nanoseconds, so multiply
	by 100 to get nanoseconds which is what we want.


svn path=/trunk/; revision=5276
2007-01-16 10:45:58 +00:00
Matthias Clasen
a74d6b9582 Correct the gettime calculations once more. (#395203, Chris Wilson)
2005-01-15  Matthias Clasen  <mclasen@redhat.com>

        * glib/gthread.c:
        * gthread/gthread-posix.c: Correct the gettime calculations
        once more.  (#395203, Chris Wilson)



svn path=/trunk/; revision=5262
2007-01-15 03:34:42 +00:00
Matthias Clasen
edf06d642d fix stupid thinko
svn path=/trunk/; revision=5252
2007-01-12 19:23:27 +00:00
Matthias Clasen
6ac483bae4 Include windows.h and fix include order. (#394258, Kazuki Iwamoto)
2007-01-12  Matthias Clasen  <mclasen@redhat.com>

        * glib/gthread.c: Include windows.h and fix
        include order. (#394258, Kazuki Iwamoto)



svn path=/trunk/; revision=5249
2007-01-12 17:31:31 +00:00
Matthias Clasen
2c7dbe9c73 Fix errors in the recently moved time calculations. (#395203, Chris
2007-01-12  Matthias Clasen  <mclasen@redhat.com>

        * gthread/gthread-posix.c:
        * glib/gtimer.c:
        * glib/gthread.c: Fix errors in the recently moved
        time calculations.  (#395203, Chris Wilson)



svn path=/trunk/; revision=5244
2007-01-12 05:55:16 +00:00
Matthias Clasen
541462ab1e Don't link glib against libpthread. (#393812)
2007-01-07  Matthias Clasen  <mclasen@redhat.com>

	Don't link glib against libpthread.  (#393812)
	
	* configure.in: Link gthread against librt, not glib itself.

	* glib/gthread.h:
	* glib/gthread.c: Add a new thread function, gettime.

	* glib/gtimer.c: Use gettime instead of directly working with
	the various system interfaces.

	* gthread/gthread-impl.c:
	* gthread/gthread-posix.c:
	* gthread/gthread-win32.c: Implement gettime.
	

svn path=/trunk/; revision=5227
2007-01-08 05:13:15 +00:00
Sebastian Wilhelmi
9645c707c0 Run _g_atomic_thread_init as the first of the full fledged initializers to
2006-05-22  Sebastian Wilhelmi  <wilhelmi@google.com>

	* glib/gthread.c (g_thread_init_glib): Run _g_atomic_thread_init
	as the first of the full fledged initializers to allow the later
	to potentially use atomic ints (which they currently do
	not). (#342563, Peter Kjellerstedt)
2006-05-23 01:33:16 +00:00
Sebastian Wilhelmi
a93560b83d Use g_atomic_pointer_set instead of old homegrown version now that we have
2006-05-10  Sebastian Wilhelmi  <wilhelmi@google.com>

	* glib/gthread.c: Use g_atomic_pointer_set instead of old
	homegrown version now that we have it. (#335198, Chris Wilson)
2006-05-11 00:10:29 +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
Matthias Clasen
b58fb2bdb5 Move short_month_names and long_month_names to bss.
2006-04-04  Matthias Clasen  <mclasen@redhat.com>

        * glib/gdate.c: Move short_month_names and long_month_names
        to bss.

        * glib/gspawn-win32.c (g_spawn_error_quark):
        * glib/gspawn.c (g_spawn_error_quark):
        * glib/gshell.c (g_shell_error_quark):
        * glib/gmarkup.c (g_markup_error_quark):
        * glib/goption.c (g_option_error_quark):
        * glib/gkeyfile.c (g_key_file_error_quark):
        * glib/giochannel.c (g_io_channel_error_quark):
        * glib/gfileutils.c (g_file_error_quark):
        * glib/gconvert.c (g_convert_error_quark):
        * glib/gbookmarkfile.c (g_bookmark_file_error_quark):
        * glib/gthread.c (g_thread_error_quark): No point in making
        the error path fast by caching quarks.

        * glib/gbookmarkfile.c: Make the parser struct const.
2006-04-04 04:37:39 +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