Commit Graph

217 Commits

Author SHA1 Message Date
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
Matthias Clasen
09b118f462 Silence compiler warnings.
2005-11-28  Matthias Clasen  <mclasen@redhat.com>

	* glib/gthread.c (g_static_rw_lock_wait, g_static_rw_lock_signal):
	* glib/gnode.c (g_node_depth_traverse_level):
	* glib/gmem.c (g_allocator_new):
	* glib/ghash.c (g_hash_table_unref, g_hash_table_destroy)
	(g_hash_table_foreach_remove_or_steal): Silence compiler
	warnings.
2005-11-28 18:31:03 +00:00
Matthias Clasen
2966c751b1 Updates
2005-11-17  Matthias Clasen  <mclasen@redhat.com>

	* NEWS: Updates

	* glib/gthread.c (g_thread_foreach): Mark as new api.

	* README.in: Updates.
2005-11-17 19:05:59 +00:00
Matthias Clasen
92ea153ae9 const correctness fixes, found by Arjan van de Ven and gcc.
2005-11-17  Matthias Clasen  <mclasen@redhat.com>

	* glib/gbacktrace.c:
	* glib/gdate.c:
	* glib/gthread.c: const correctness fixes, found
	by Arjan van de Ven and gcc.
2005-11-17 13:17:22 +00:00
Tim Janik
0cba1b531d prepared deprecation of GMemChunk and GAllocator. added g_slice_*() API to
Tue Nov  1 16:24:20 2005  Tim Janik  <timj@imendio.com>

        * glib/gmem.[hc]: prepared deprecation of GMemChunk and GAllocator.
        added g_slice_*() API to allocate and cache small bits of memory.
        an actuall allocator implementation for g_slice_*() is still pending.

        * glib/gthread.[hc]: changes from a patch by Matthias Clasen.
        changed GRealThread list to use in-structure *next; fields instead
        of GSList, in order for thread iteration to not depenend on g_slice_*()
        indirectly.
        _g_thread_mem_private_get():
        _g_thread_mem_private_set(): added accessors for private memory,
        needed because the ordinary GPrivate implementation relies on GArray
        and GSList and therefore indirectly on working g_slice_*() allocations.

        * glib/gthread.[hc]:
        g_thread_foreach(): new public API function to loop over all existing threads.

        * glib/gdataset.c:
        * glib/gstring.c:
        * glib/gcache.c:
        * glib/garray.c:
        * glib/gqueue.c:
        * glib/gslist.c:
        * glib/glist.c:
        * glib/ghash.c:
        * glib/gtree.c:
        * glib/ghook.c:
        * glib/gmain.c:
        * glib/gnode.c:
        removed GAllocator and free list usages and accompanying locks.
        use g_slice_*() API to allocate and cache small bits of memory.

        * glib/ghook.h: removed GMemChunk field from public API.

        * glib/gslist.h:
        * glib/glist.h: deprecate allocator API, provide _free1() for consistency.

        * glib/gnode.h: deprecate allocator API.

        * glib/gmain.c: reordered GPollRec fields so g_slice_free_chain() can
        be used for poll rec lists.

        * glib/grel.c: removed mem chunk usage, and allocated tuples via g_slice_*().
        g_relation_destroy(): free all tuples from the all_tuples hash table,
        this effectively maintains the life time track keeping of tuples.
        g_relation_delete_tuple(): free tuples which are removed from the
        all_tuples hash table. this fixes a temporary leak that was present
        in the memchunk code until the destruction of the relation.
2005-11-01 18:10:31 +00:00
Matthias Clasen
392980c783 Don't lock if depth is zero. (#310148, Wim Taymans)
2005-07-12  Matthias Clasen  <mclasen@redhat.com>

	* glib/gthread.c (g_static_rec_mutex_lock_full): Don't lock
	if depth is zero.  (#310148, Wim Taymans)
2005-07-12 16:56:51 +00:00
Matthias Clasen
608a31b98e Make PLT-reduction work with gcc4, and don't include everything in
2005-03-13  Matthias Clasen  <mclasen@redhat.com>

	Make PLT-reduction work with gcc4, and don't include
	everything in galias.h:

	* glib/glib.symbols: Group symbols by header and source file.
	* glib/makegalias.pl: Protect definitions by the same
	preprocessor symbols used to guard the headers. Move
	the alias declarations to a separate file which is
	produced when calling makegalias.pl -def
	* glib/Makefile.am (galiasdef.c): Add a rule to generate this
	file.
	* glib/*.c: Include galias.h after the other GLib headers,
	include galiasdef.c at the bottom.
2005-03-14 04:26:57 +00:00
Matthias Clasen
10632e416f Update the returned value after locale changes. (#160271, Christian
2004-12-07  Matthias Clasen  <mclasen@redhat.com>

	* glib/gutils.c (g_get_language_names): Update the returned
	value after locale changes.  (#160271, Christian Persch)
	(_g_utils_thread_init): Initialize the language name cache
	before going threaded.

	* glib/gthread.c (g_thread_init_glib): Call _g_utils_thread_init().

	* glib/gthreadinit.h: Add _g_utils_thread_init().
2004-12-07 15:20:15 +00:00
Matthias Clasen
537908e429 Make the last change compile. 2004-10-26 14:24:27 +00:00
Matthias Clasen
9b66aa4222 Make this function thread-safe in the GLib style.
2004-10-26  Matthias Clasen  <mclasen@redhat.com>

	* glib/gwin32.c (g_win32_get_windows_version): Make this
	function thread-safe in the GLib style.
	* glib/gthreadinit.h:
	* glib/gwin32.c (_g_win32_thread_init): New function to
	initialize the version.
	* glib/gthread.c (g_thread_init_glib): Call
	_g_win32_thread_init() from here.
2004-10-26 14:04:52 +00:00
Matthias Clasen
dafdffd751 Implement the same PLT reduction technique used in GTK+:
Thu Sep 16 02:03:15 2004  Matthias Clasen  <maclas@gmx.de>

	Implement the same PLT reduction technique used in GTK+:
2004-09-16 06:05:53 +00:00
Tor Lillqvist
9b4080611a glib/giowin32.c glib/gmain.c glib/gstrfuncs.c Decorating variable
2004-04-10  Tor Lillqvist  <tml@iki.fi>

	* glib/giowin32.c
	* glib/gmain.c
	* glib/gstrfuncs.c
	* glib/gthread.c: Decorating variable definitions with
	__declspec(dllexport) causes problems on Cygwin build, and isn't
	really needed for a native Win32 build with mingw or MSVC, so
	remove. (#138402, Roger Leigh)

	* glib/libcharset/localcharset.c: Use Win32-specific code also on
	Cygwin.
	* tests/uri-test.c: Don't assume that local filenames are in UTF-8
	on Cygwin, either. (#138412, Roger Leigh)
2004-04-10 01:55:57 +00:00
Matthias Clasen
ab0031bf00 Patch by Sebastian Wilhemi to fix infinite recursion in g_atomic. 2004-03-05 21:10:45 +00:00
Sebastian Wilhelmi
76c213543a Removed the PID niceness surrogate for thread priorities as requested by
2004-02-26  Sebastian Wilhelmi  <seppi@seppi.de>

	* configure.in, config.h.win32.in, glib/gthread.c: Removed the PID
	niceness surrogate for thread priorities as requested by Tim. It
	does more harm than good.

        * glib/tmpl/threads.sgml: Updated to reflect removal of the PID
	niceness surrogate for thread priorities.
2004-02-26 14:44:42 +00:00
Sebastian Wilhelmi
28a267e306 For the PID thread priorities surrogate use gettid instead of getpid. This
2004-02-25  Sebastian Wilhelmi  <seppi@seppi.de>

	* configure.in, glib/gthread.c: For the PID thread priorities
	surrogate use gettid instead of getpid. This also works with nptl
	(on linux-2.6), as well as with linuxthreads (on linux-2.4).
2004-02-25 13:23:14 +00:00
Matthias Clasen
876f907863 Support for one-time initialization functions. (#69668, Sebastian
2003-07-09  Matthias Clasen  <maclas@gmx.de>

	Support for one-time initialization functions.  (#69668, Sebastian Wilhelmi)

	* configure.in: Check whether double checked locking is safe, define g_once() in
	glibconfig.h accordingly.
	* glib/gthread.h: Add GOnce, GOnceStatus, G_ONCE_INIT and g_once_impl.
	* glib/gthread.c (g_once_impl): Fallback implementation using a mutex if double checked
	locking is unsafe.
	* tests/thread-test.c: Add tests for g_once().
2003-07-08 23:43:48 +00:00
Sebastian Wilhelmi
3030dcbd7e Do not define function g_thread_init_glib, if not G_THREADS_ENABLED. It's
2003-03-14  Sebastian Wilhelmi  <seppi@seppi.de>

	* glib/gthread.c: Do not define function g_thread_init_glib, if
	not G_THREADS_ENABLED. It's not called bu g_thread_init() then,
	but calls other, in that case undefined functions.
2003-03-14 14:29:21 +00:00
Sebastian Wilhelmi
8e91cf9eb9 Fixes for #101264 and #99372:
2003-02-14  Sebastian Wilhelmi  <seppi@seppi.de>

	Fixes for #101264 and #99372:

	* glib/gconvert.h, glib/gmain.c, glib/gmem.c, glib/gmessages.c,
	glib/grand.c: Include gthreadinit.h and rename the thread
	initialization functions a bit and let them start with _, so that
	later we can stop exporting them.

	* glib/gmem.c, glib/gmessages.c: Move the g_private_new() calls to
	new functions. They have to be called after setting
	g_threads_got_initialized to TRUE (see #101264).

	* glib/gthread.c: Include gthreadinit.h. Renamed g_mutex_init() to
	g_thread_init_glib(). Call the thread initialization functions
	(which are not allowed to call g_private_new), then set
	g_threads_got_initialized to TRUE, then call the other thread
	initialization functions (which must not call anything but
	g_private_new()).

	* glib/gthreadinit.h: New private header to cleanly declare all
	thread initialization functions.

	* gthread/gthread-impl.c: Include gthreadinit.h. In
	g_thread_init() just call g_thread_init_glib(), which in turn calls the
	other functions (see #99372).

	* glib/Makefile.am: Added gthreadinit.h.
2003-02-14 15:08:46 +00:00
Owen Taylor
424b7e92fc Mark the contents of the strucures in this file /*< private >*/
Sat Dec 14 21:10:57 2002  Owen Taylor  <otaylor@redhat.com>

        * glib/gthread.h: Mark the contents of the strucures
        in this file /*< private >*/

        * glib/gthread.[ch]: Rename the 'write' field of the
        structure to 'have_writer' to avoid any possible
        conflict with system headers. (#90549, Morten Welinder)
2002-12-15 02:19:06 +00:00
Owen Taylor
bbbd329ff5 Patch from Sven Neumann to make the include order consistent. (#71704)
Tue Dec  3 20:22:27 2002  Owen Taylor  <otaylor@redhat.com>

        * glib/*.c: Patch from Sven Neumann to make the
        include order consistent. (#71704)
2002-12-04 01:27:44 +00:00
Sebastian Wilhelmi
3faf95913d Set the normal PID surrogate priority according to getpid() to avoid
2002-08-06  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* glib/gthread.c: Set the normal PID surrogate priority according
	to getpid() to avoid errors for niced processes. (#86116)

	* gthread/gthread-impl.c, gthread/gthread-posix.c,
	gthread/gthread-solaris.c: Do the same for the posix/dce
	implementation. Solaris still needs to set priority of the main
	thread, because all unbound threads will schedule according to
	that value and it defaults to 0 (the minimal value).
2002-08-06 13:31:26 +00:00
Sebastian Wilhelmi
cb17f230b5 Delay allocation until after all g_return_val_if_fail ().
2002-02-04  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* glib/gthread.c (g_thread_create_full): Delay allocation until
	after all g_return_val_if_fail ().

	* glib/gthread.h: Make depth member guint for cosmetic reasons.

	* glib/gthread.c: (g_static_rec_mutex_unlock_full): depth should
	be unsigned. All that spotted by Jrgen Viksell
	<jorgen.viksell@telia.com>
2002-02-04 13:49:36 +00:00
Sebastian Wilhelmi
f8f4c3778a Add thread_equal function to allow for platform defined function to
2001-09-19  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* glib/gthread.h (GThreadFunctions): Add thread_equal function to
	allow for platform defined function to compare two threads.

	* glib/gthread.c: Use g_thread_functions_for_glib_use.thread_equal
	when non-NULL instead of ==.

	* gthread/gthread-posix.c: Add g_thread_equal_posix_impl and
	add to the function vector g_thread_functions_for_glib_use_default.

	* gthread/gthread-solaris.c, gthread/gthread-win32.c: Add NULL
	as equal function, as on those two platforms you don't need an
	equal function.
2001-09-19 12:46:39 +00:00
Sebastian Wilhelmi
bd2329ae66 Add 'want_to_read' to GStaticRWLock to avoid calling g_cond_broadcast,
2001-08-30  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* glib/gthread.h, glib/gthread.c: Add 'want_to_read' to
	GStaticRWLock to avoid calling g_cond_broadcast, when no one is
	waiting.
2001-08-30 14:19:20 +00:00
Owen Taylor
8951f96c50 Make some changes to the way that GMainContext works:
Sat Jun 30 15:49:10 2001  Owen Taylor  <otaylor@redhat.com>

	* glib/gmain.[ch]: (Mostly patch from Sebastian Wilhemi)
	Make some changes to the way that GMainContext works:

	 - a GMainContext is no longer associated with a single
	   thread, but any thread can acquire ownership
	   of thread and iterate.

	 - There is a facility g_main_context_wait() for
	   non-owner-threads to wait either for ownership
	   or for a condition to be broadcast.

	 - For efficiency, GMainLoop just piggybacks of
	   of the loops mutex / condition instead of
	   having a separate mutex/condition for each
	   GMainLoop.

	* glib/gthread.[ch]: Remove hacks to store the thread's
	GMainContext in the GThread structures, since we
	no longer have the GMainContext <=> GThread correspondence.

        * glib/gmain.[ch]: Make g_main_context_wakeup() public
	so someone could completely duplicate GMainLoop
	with the public API.

	* tests/mainloop-test: Fix up to the new API. Decidedly
	doesn't work at the moment, but that may be the IO
	channel changes, or preexisting locking problems.
2001-06-30 19:56:47 +00:00
Sebastian Wilhelmi
e2b7bedbde g_thread_create renamed to g_thread_create_full.
2001-05-22  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* glib.def: g_thread_create renamed to g_thread_create_full.

	* gthread.c: memcpy is not necessary here. We can simply use
	struct assignment.

	* gmessages.c: Fix compilation error on win32. Added
	GFileDescriptor, wich is gint on Unix and FILE* on win32.
2001-05-22 12:06:59 +00:00
Sebastian Wilhelmi
227d18bc46 Renamed g_thread_create to g_thread_create_full and added macro
2001-05-18  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gthread.c, gthread.h: Renamed g_thread_create to
	g_thread_create_full and added macro g_thread_create, which omits
	'stack_size', 'bound' and 'priority' parameters. Also removed
	'bound' from GThread struct.

	* gthreadpool.h, gthreadpool.c: Adapted GThreadPool to the above
	changes. GThreadPool lost the 'priority' and 'bound'
	members. g_thread_pool_new the 'stack_size', 'bound' and
	'priority' parameters.

	* tests/mainloop-test.c, tests/thread-test.c,
	tests/threadpool-test.c: Adapted to the above changes.
2001-05-18 08:44:57 +00:00
Sebastian Wilhelmi
a8c9dadde2 Renamed 'value' and 'arg' to 'data' and 'thread_func' to 'func' to make it
2001-05-09  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gthread.c, gthread.h: Renamed 'value' and 'arg' to 'data' and
	'thread_func' to 'func' to make it more consistent with the rest
	of GLib.

	* gthreadpool.c, gthreadpool.h: Moved 'stack_size' from the public
	members of GThreadPool to the private ones. Renamed 'thread_func'
	to 'func' as above. Moved up 'user_data' in g_thead_pool_new
	argument list and in GThreadPool struct.
2001-05-09 12:51:21 +00:00
Sebastian Wilhelmi
cd00d6e2cc Moved func and arg members from GRealThread to GThread, such that they can
2001-05-08  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gmain.c, gthread.c, gthread.h: Moved func and arg members from
	GRealThread to GThread, such that they can be accessed by the
	user.

	* gthread.c, gthread.h: Due to popular demand (Tim being the
	populus here ;-) threads now have a 'return value', which is
	returned by g_thread_join and is either the return of the topmost
	thread function or the value given to g_thread_exit.

	* gthreadpool.c, tests/mainloop-test.c, tests/thread-test.c:
	Adapted to the above change.
2001-05-08 08:23:18 +00:00
Sebastian Wilhelmi
7b06f826c9 Use the new GRealThread member "context" instead of a GStaticPrivate to
2001-04-02  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gmain.c: Use the new GRealThread member "context" instead of a
	GStaticPrivate to store the thread specific main loop context.

	* gthread.c: Added "context" member to GRealThread and updated
	g_thread_create, g_thread_self and g_thread_cleanup accordingly.

	* gthread.c, gthread.h: Removed the functions
	g_static_private_(get|set)_for_thread and adapted
	g_static_private_(get|set) and g_static_private_free accordingly.
2001-04-02 16:34:08 +00:00
Tor Lillqvist
31c5b1899d Cygwin support contributed by Stefan Ondrejicka <ondrej@idata.sk>.
2001-02-21  Tor Lillqvist  <tml@iki.fi>

	Cygwin support contributed by Stefan Ondrejicka
	<ondrej@idata.sk>. Hopefully I got it all in while simultaneously
	adding support for auto*/libtool for mingw.

	* Makefile.am: Changes for auto* support on Cygwin and Win32. Do
	still distribute the hand-written makefiles and *.win32.in files,
	though. Use GIO, GSPAWN and PLATFORMDEP macros set by configure.
	Use -no-undefined. Pass -export-symbols glib.def to libtool.

	* configure.in: Define G_PLATFORM_WIN32 on both pure Win32 (mingw)
	and Cygwin. Add AC_CYGWIN, AC_EXEEXT and AC_LIBTOOL_WIN32_DLL
	calls for Cygwin and mingw support.  Check for %I64u guint64
	format (in MS C library). Set G_MODULE_IMPL on mingw and
	Cygwin. Use ac_object and ac_exeext.  Set GIO, GSPAWN, PLATFORMDEP
	and G_LIBS_EXTRA. Compile timeloop only on Unix. Define OS_WIN32
	automake conditional on Win32.

	* glib.h: Include gwin32.h also on Cygwin.

	* gfileutils.c (get_contents_posix): Use O_BINARY (defined as 0 on
	Unix) for Cygwin's sake.

	* gtimer.c (GETTIME): Reduce #ifdefs, use a macro GETTIME().

	* gconvert.c
	* gthread.c
	* gutf8.c
	* gutils.c: For code needed both on Cygwin and native Win32,
	test for G_PLATFORM_WIN32.

	* gmarkup.h: Use G_BEGIN_DECLS and G_END_DECLS.

	* gtypes.h: Refine GLIB_VAR definition. Also check for DLL_EXPORT
	in case compiling a static library on Win32 or Cygwin.

	* gwin32.c: No <direct.h> on Cygwin. No need for ftruncate() or
	dirent emulation on Cygwin.
	(get_package_directory_from_module) Convert return value from
	GetModuleFileName() to POSIX path on Cygwin.

	* tests/Makefile.am (progs_LDADD): Link with libglib, libgthread
	and libgmodule as appropriate. Use -no-undefined.

	* gbacktrace.c: Move #ifdefs around a bit on Win32.

	* gshell.c (unquote_string_inplace): Make static.
2001-03-09 21:23:33 +00:00
Sebastian Wilhelmi
2395a333cc Change the order to match the order in g_thread_create().
2001-02-23  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gthread.h (struct _GThread): Change the order to match the order
	in g_thread_create().

	* gthread.c (g_static_rec_mutex_lock_full): Also do the right
	thing (behave like 'depth' calls to g_static_rec_mutex_lock) for a
	mutex, that is already locked.

	* glib/tmpl/threads.sgml: Big update. Almost ready.

	* glib/tmpl/async_queues.sgml: Typo.

	* glib/glib-sections.txt: Added g_static_rec_mutex_init,
	g_static_rec_mutex_free, g_static_rw_lock_init,
	g_static_private_init and g_static_private_free.

	* glib/glib-overrides.txt: Added g_thread_yield and g_thread_exit.
2001-02-23 16:42:48 +00:00
Hans Breuer
d1a05f990e updated for win32 msvc build 2001-02-19 21:51:19 +00:00
Havoc Pennington
1c391cc698 include string.h
2001-02-17  Havoc Pennington  <hp@pobox.com>

	* gthread.c: include string.h

        Applied patch from Soeren Sandmann:

	* testglib.c: const fixes

	* gwin32.h: format cleanups

	* gutils.c (g_atexit): constify a variable
	(g_find_program_in_path): constification
	(g_basename): G_CONST_RETURN
	(g_path_skip_root): G_CONST_RETURN
	(g_getenv): G_CONST_RETURN
	(g_get_user_name): G_CONST_RETURN
	(g_get_real_name): G_CONST_RETURN
	(g_get_home_dir): G_CONST_RETURN
	(g_get_tmp_dir): G_CONST_RETURN
	(g_get_prgname): G_CONST_RETURN
	(_glib_gettext): G_CONST_RETURN

	* gunicode.h: formatting cleanups

	* gstrfuncs.c (g_strerror): G_CONST_RETURN
	(g_strsignal): G_CONST_RETURN

	* gspawn.c (g_execute): const on variables

	* gmessages.c (printf_string_upper_bound): fix const on a variable

	* gmem.c (g_mem_chunk_new): make the "name" arg const
	(struct _GRealMemChunk): make the "name" field const

	* gfileutils.c (g_file_open_tmp): store const return in a const
	gchar* variable

	* gdataset.c (g_quark_to_string): G_CONST_RETURN

2001-02-17  Havoc Pennington  <hp@pobox.com>

        Applied patch from Soeren Sandmann:

	* gvaluetypes.c (g_value_get_string): G_CONST_RETURN

	* gtype.c (g_type_name): G_CONST_RETURN

	* gsignal.c (g_signal_name): G_CONST_RETURN

	* gobject-query.c (main): const fix

2001-02-17  Havoc Pennington  <hp@pobox.com>

        Applied patch from Soeren Sandmann:

	* gmodule.c (g_module_error): G_CONST_RETURN
	(g_module_name): G_CONST_RETURN
2001-02-17 23:30:48 +00:00
Sebastian Wilhelmi
efb2e89e07 Reverted the changes necessary to enlarge the system thread for
2001-02-15  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* acconfig.h, configure.in: Reverted the changes necessary to
	enlarge the system thread for G_THREAD_USE_PID_SURROGATE.

	* gthread.c: Now implement G_THREAD_USE_PID_SURROGATE in gthread.c
	instead of gthread/gthread-posix.c. While the latter has the
	advantage, that it is conceptually cleaner, it makes
	g_thread_self_posix_impl _very_ slow and that hurts
	GStaticRecMutex and other things. So the new version is less
	clean, but faster.

	* gthread-posix.c: Removed the G_THREAD_USE_PID_SURROGATE
	implementation, which is now in gthread.c.
2001-02-15 16:43:02 +00:00
Sebastian Wilhelmi
41e2001d85 Added functions g_static_rec_mutex_init, g_static_rec_mutex_free,
2001-02-13  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gthread.c, gthread.h: Added functions g_static_rec_mutex_init,
	g_static_rec_mutex_free, g_static_private_init,
	g_static_private_free, g_static_rw_lock_init to allow the usage of
	all those types dynamically. (g_static_rw_lock_free already
	existed). Aditionally freed static_private indeces are reused
	now. Untill now the array would just grow if you would use more
	and more static_private. That required adding a slist of all
	running threads, which could potentially be of good use later. It
	is not exported however. Renamed a LOCK and small indentation
	fixes.

	* tests/thread-test.c: Test the new static_private index freing
	and reusing feature.
2001-02-13 15:57:44 +00:00
Sebastian Wilhelmi
5434105fcb Added g_static_mutex_init to allow initialization of a GStaticMutex, that
2001-02-01  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gthread.c, gthread.h: Added g_static_mutex_init to allow
	initialization of a GStaticMutex, that can not be initialized with
	G_STATIC_MUTEX_INIT, for example in allocated structures.

	* glib/tmpl/threads.sgml, glib/glib-sections.txt: Added
	documentation for g_static_mutex_init().

WCVS: ----------------------------------------------------------------------
2001-02-01 09:37:28 +00:00
Sebastian Wilhelmi
f9dfcb27b7 Call g_thread_impl_init(), as g_thread_init won't call it.
2001-01-30  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gthread/gthread-impl.c (g_thread_init_with_errorcheck_mutexes): Call
	g_thread_impl_init(), as g_thread_init won't call it.


	* glib/glib-sections.txt, glib/tmpl/threads.sgml: Added
	g_static_mutex_free

	* gthread.c, gthread.h: Added g_static_mutex_free to allow using
	GStaticMutexes with limited lifetime without leaking.

	* configure.in: GStaticMutex doesn't have to provide extra space
	for debugging information for G_ERRORCHECK_MUTEXES, as then the
	non-default implementation (runtime_mutex) is used anyway.
2001-01-30 14:16:56 +00:00
Sebastian Wilhelmi
c96ad49767 Broadcast the condition, if there are waiting readers, as all might read
2001-01-29  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gthread.c: Broadcast the condition, if there are waiting
	readers, as all might read at the same time. Only signal the
	writer thread, if there are no more readers.

	* gthread/gthread-impl.c (g_mutex_free_errorcheck_impl): Add
        new check to errorcheck mutexes to abort, if a locked mutex is freed.
2001-01-29 16:32:26 +00:00
Sebastian Wilhelmi
fe0f325777 Revamped errorcheck mutexes and added errorcheck cond_wait() and
2000-11-28  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gthread-impl.c: Revamped errorcheck mutexes and added errorcheck
	cond_wait() and cond_timed_wait() funtions. This makes he whole
	thing work. Now we only show the location of the locking/unlocking
	for -DG_ERRORCHECK_MUTEXES and not the name of the mutex.

	* gthread.c: Set the thread data before locking the mutex, because
	the locking call might use g_thread_self ().

	* gthread.h: Do only show the location of the locking/unlocking
	for -DG_ERRORCHECK_MUTEXES and not the name of the mutex. Add the
	errorcheck capability for g_cond_wait and g_cond_timed_wait as
	well.
2000-11-28 12:56:57 +00:00
Sebastian Wilhelmi
a3036a5bd2 Add a surrogate for thread priorities using PID niceness for systems with
2000-11-21  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Add a surrogate for thread priorities using PID
	niceness for systems with no thread priorities and different PIDs
	for threads of the same process (most notably: Linux). Define
	G_THREAD_USE_PID_SURROGATE in that case, as used by
	gthread-posix.c. Also make the system thread bigger by
	sizeof (long) to contain the thread's PID.

	* gfileutils.c: Include stdlib.h for mkstemp prototype.

	* gthread.c: Add priority range checks to the affected functions.

	* gthreadpool.c: Remove unused variable.

	* gthread-impl.c, gthread-posix.c, gthread-solaris.c: Removed
	g_thread_map_priority function in favour of the
	g_thread_priority_map array.  Initialize the array with
	PRIORITY_{...}_VALUE, if available and interpolate beetween the
	bounds if .._NORMAL_.. and .._HIGH_.. are not available.

	* gthread-posix.c: If we should use the PID niceness as a
	surrogate for thread priorities (G_THREAD_USE_PID_SURROGATE is
	defined), then disable normal priority handling and use PIDs and
	setpriority() instead. Depends on the thread to write its PID into
	the place after the thread id right after thread creation.
2000-11-21 15:27:44 +00:00
Sebastian Wilhelmi
82ab77c8f7 Made recursive mutexes also work when the thread system is not (yet)
2000-11-13  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gthread.c (g_static_rec_mutex_*): Made recursive mutexes also
	work when the thread system is not (yet) initialized.
2000-11-13 12:50:16 +00:00
Sebastian Wilhelmi
3ca18629b0 Don't use a G_LOCK, as it isn't necessary.
2000-09-05  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* gthread.c (g_thread_error_quark): Don't use a G_LOCK, as it
	isn't necessary.
2000-09-05 08:58:20 +00:00
Sebastian Wilhelmi
64bbfbb6da Include gerror.h before it is used for some g_thread_* functions.
2000-09-01  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* glib.h: Include gerror.h before it is used for some g_thread_*
	functions.

	* gthread.c, gthreadpool.c, glib.h: Enable error reporting for
	thread creation, namly for g_thread_create, g_thread_pool_new,
	g_thread_pool_push and g_thread_pool_set_max_threads.

	* tests/thread-test.c, tests/threadpool-test.c: Adapted
	accordingly.

	* gthread-posix.c (g_thread_create_posix_impl): Use GError to
	report errors.
2000-09-01 13:03:23 +00:00
Tim Janik
c9bd7542e1 applied patch from Andreas Persenius <ndap@swipnet.se> that updates the
Wed Jul 26 12:59:31 2000  Tim Janik  <timj@gtk.org>

        * *.[hc]: applied patch from Andreas Persenius <ndap@swipnet.se> that
        updates the license headers to the GNU Lesser General Public License,
        as well as updating the copyright year to 2000.
2000-07-26 11:02:02 +00:00
Sebastian Wilhelmi
5e7134375e Added the missing POSIX_NO_YIELD and POSIX_NO_PRIORITIES warning messages.
2000-03-17  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in: Added the missing POSIX_NO_YIELD and
	POSIX_NO_PRIORITIES warning messages.

	* configure.in: Use AC_TRY_RUN instead of AC_TRY_LINK, to test for
	real thread support. On solaris pthread_create can be linked to
	even in -lc, but it doesn't work then.

	* configure.in: Don't use priorities for threads, when the
	minimal/maximal priorities couldn't be determined at configure
	time.

	* configure.in, gthread.c: Always define GSystemThread in
	glibconfig.h to represent a system thread.

	* configure.in: Do not use native recursive threads, when
	possibe. We use some features, that they do not expose (namely the
	depth counter).

	* glib.h, gthread.c: Redefined GStaticRecMutex. The functions are
	now implemented in a different way, which should be way
	faster. Alsothere are now functions g_static_rec_mutex_unlock_full
	and g_static_rec_mutex_lock_full to leave/enter a recursive mutex
	completly.

	* gthread.c (g_thread_self): Do not test the system_thread to be
	non-zero to speed things up.

	* gthread.c (g_mutex_init): Therefore set the system_thread of the
	main thread here.

	* tests/thread-test.c: Rerun all tests once again, but this time
	we fool the system into thinking, that the available thread system
	is not native, but userprovided.

	* gthread/gthread-posix.c: Don't use priorities for threads,
	when the minimal/maximal priorities couldn't be determined at
	configure time.

	* gthread/gthread-posix.c: Don't check for errors, when
	setting the scope of a tread to system, as some posix
	implementations can't do that and we don't want the thing to
	fail because of that.
2000-03-17 14:49:59 +00:00
Sebastian Wilhelmi
760a7ceef2 Renamed GLIB_SIZEOF_PTHREAD_T to GLIB_SIZEOF_SYSTEM_THREAD to reflect
1999-11-16  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

        * acconfig.h, config.h.win32.in, configure.in: Renamed
        GLIB_SIZEOF_PTHREAD_T to GLIB_SIZEOF_SYSTEM_THREAD to reflect
        changed meaning.

        * configure.in: Cope with systems, that have a pthread_t type,
        that is not a pointer. Hint from Karl Nelson
        <kenelson@ece.ucdavis.edu>. Define GLIB_SIZEOF_SYSTEM_THREAD to 4
        for Solaris. Cope with systems, that have no default mutex
        initialize, like obviously most DCE systems.

        * glib.h, gthread.c: Changed the prototype of thread_create and
        thread_self to return the system thread into provided memory
        instead of a return value. This is necessary, as HPUX has a
        pthread_t, that is bigger than the biggest integral type there.

        * gthread.c: system_thread is no longer a pointer, but an memory
        area of size GLIB_SIZEOF_SYSTEM_THREAD. Changed the
        zeroinitialization and the tests for zeroness accordingly.
1999-11-16 10:30:25 +00:00
Manish Singh
7ea73a0199 G_OS_FOO #defines. I *think* I got the cygwin and beos stuff right, but
I haven't tested it. The respective porters should fix any screwups

-Yosh
1999-10-04 02:32:50 +00:00
Tor Lillqvist
be80f9a106 Update the pthreads snapshot version we want. Advice how to hand-expand
* README.win32: Update the pthreads snapshot version we want.
	Advice how to hand-expand the makefile.*.in files.

	* config.h.win32.in: Define values needed by Sebastian Wilhelmi's
	new thread stuff.

	* glib.def: Add new functions.

	* glibconfig.h.win32.in: Update the pthreads snapshot version.
	Fix typo.

	* gthread.c: Include config.h, guard inclusion of unistd.h.  When
 	using gcc on Win32, g_thread_functions_for_glib_use must be marked
 	for export here, too.

	* gtimer.c: Implement g_usleep on native Win32 using Sleep (which
	only has millisecond granularity, though).

	* makefile.cygwin.in
	* makefile.msc.in: Update pthreads snapshot version. File
	name changes. Remove testgthread.

	* tests/makefile.cygwin.in
	* tests/makefile.msc.in: Add thread-test. Link with gthread lib.

	* gthread-posix.c: Guard pthread_attr_setscope call with test
	for _POSIX_THREAD_PRIORITY_SCHEDULING, which should be defined
	in a <pthread.h> that supports that feature.
1999-06-20 22:20:43 +00:00
Sebastian Wilhelmi
90f6cc9bf2 Completed the thread support in GLib. Thread creation, prioritizing
1999-06-17  Sebastian Wilhelmi  <wilhelmi@ira.uka.de>

	* configure.in, acglib.m4, acconfig.h, glib.h, gthread.c:
	Completed the thread support in GLib. Thread creation,
	prioritizing threads, yielding, joining threads as well as
	reader/writer locks and recursive mutexes are now in place. Please
	test heavily on your platform. It is so far tested on
	Linux/i386/pthreads, Solaris/Sparc/pthreads and
	Solaris/Sparc/solaristhreads.

	* gtimer.c, glib.h: Implement g_usleep (gulong microseconds) for
	thread safe sleeping. (sleep() is not MT-safe at all!)

	* gutils.c: Avoid compiler warning.

	* tests/Makefile.am, tests/thread-test.c: New program to test some
	aspects of the thread implementation.

	* gthread.c, Makefile.am: Renamed from gmutex.c to reflect the
	change of content.

	* configure.in: Purged all appearances of nspr.

	* gthread/gthread-posix.c, gthread-solaris.c: Added the native
	implementations for the GLib's extended thread support.

	* gthread/gthread-nspr.c: Removed for good. NSPR is nothing we
	would want to build upon.

	* gthread/gthread.c: Renamed to gthread-impl.c to avoid
	confusion with ../gthread.c (Formerly known as the file called
	gmutex.c)

	* gthread/testgthread.c: Removed. The new and much extended
        tests are in ../tests/thread-test.c.

	* gthread/Makefile.am: Changed to reflect the changes above.
1999-06-17 15:39:31 +00:00