375 Commits

Author SHA1 Message Date
Matthias Clasen
ef159af00f Use G_SOURCE_CONTINUE/REMOVE internally
Now that we have these macros, we should use them.
This commit covers everything in glib/.
2012-01-25 16:15:18 -05:00
Dan Winship
673396fb65 gmain: fix adding a child source to an already-attached source
Adding a child source to an already-attached parent source would
crash, because we were passing the parent's context when setting the
child's priority.
2012-01-15 09:39:14 -05:00
Ravi Sankar Guntur
0ed2cdb0d9 Use g_queue_free_full() convenience function.
https://bugzilla.gnome.org/show_bug.cgi?id=667331

Signed-off-by: Ravi Sankar Guntur <ravi.g@samsung.com>
2012-01-09 19:27:39 -05:00
Stef Walter
7e92997539 documentation fixes
Fixes for gtk-doc warnings.

http://bugzilla.gnome.org/show_bug.cgi?id=66469

https://bugzilla.gnome.org/show_bug.cgi?id=664699
2011-12-13 23:01:51 -05:00
Giovanni Campagna
d2fd6dac4a GMain: allow NULL context to g_source_attach
Documentation says it's fine and means default context, but the annotations
are missing (and thus bindings would complain).

https://bugzilla.gnome.org/show_bug.cgi?id=664302
2011-11-18 15:21:17 +01:00
Alexander Larsson
3a7960f757 win32: Make g_get_monotonic_clock lockless 2011-11-16 09:10:46 +01:00
Alexander Larsson
8d023c2706 win32: Use timeGetTime as monotonic base
This allows apps that need it to increase timer accuracy
using timeBeginPeriod
2011-11-16 09:10:46 +01:00
Alexander Larsson
64dec8ad9f win32: Add a monotonic timer 2011-11-16 09:10:45 +01:00
Ryan Lortie
740eacbfca static and #include fixups in glib/ 2011-10-16 21:41:15 -04:00
Ryan Lortie
7ab25865f2 Stop checking for fork() across GMainContext
01ed78d525cf2f8769022e27cc2573ec7ba123b3 introduced assertion checks for
creating a main context, forking, and attempting to use the main context
from the child side of the fork.

Some code (such as gnome-keyring-daemon) daemonise after calling
GMainContext.  That's probably still mostly safe since we still only
have one side of the fork touching the context afterwards.

This use case is still troubling, however, since if any worker threads
have been created at the time of the fork(), we could end up in the
classic situation of leaving some mutexes in a locked state when the
other threads disappear from the copy of the image that the child gets.

This will require some deeper thinking...
2011-10-14 20:01:22 -04:00
Ryan Lortie
51773c6c64 Mask all signals in GLib worker thread
Some code using GLib (gnome-keyring-daemon, for example) assumes that
they can catch signals by masking them out in the main thread and
calling sigwait() from a worker.

The problem is that our new worker thread catches the signals before
sigwait() has a chance and the default action occurs (typically
resulting in program termination).

If we mask all the signals in our worker, then this can't happen.
2011-10-14 20:01:22 -04:00
Ryan Lortie
430c5635f2 g_thread_new: never fail
Remove the GError argument from g_thread_new() and abort on failure.
Introduce g_thread_try() for those who want to handle failure.
2011-10-13 01:00:57 -04:00
Ryan Lortie
015f4b4513 thread: nuke the concept of 'joinable'
And remove the 'joinable' argument from g_thread_new() and
g_thread_new_full().

Change the wording in the docs.  Clarify expectations for
(deprecated) g_thread_create().
2011-10-13 00:43:33 -04:00
Dan Winship
71cf70b39c Simplify checks for CLOCK_MONOTONIC
Remove the complicated configure-time and runtime checks, and just use
CLOCK_MONOTONIC if it's defined.

https://bugzilla.gnome.org/show_bug.cgi?id=661421
2011-10-12 08:59:35 -04:00
Ryan Lortie
baa394910b gmain: use GPrivate instead of GStaticPrivate 2011-10-11 18:42:03 -04:00
Dan Winship
59f1f54655 Add g_main_context_ref_thread_default()
Add g_main_context_ref_thread_default(), which always returns a
reffed GMainContext, rather than sometimes returning a (non-reffed)
GMainContext, and sometimes returning NULL. This simplifies the
bookkeeping in any code that needs to keep a reference to the
thread-default context for a while.

https://bugzilla.gnome.org/show_bug.cgi?id=660994
2011-10-07 10:14:34 -04:00
Dan Winship
7ca83c6c9f Fix up some doc comments that referred to threads not being enabled
(and a few other unrelated comment fixes)
2011-10-05 11:54:36 -04:00
Ryan Lortie
47444dacc0 Deprecate g_thread_init()
Move the last few things that needed thread-safe initialisation to a
global ctor.

https://bugzilla.gnome.org/show_bug.cgi?id=660744
2011-10-04 15:31:49 -04:00
Ryan Lortie
518feb45eb GMain, ThreadPool: embed GCond in struct
Use an embedded GCond and g_cond_init()/clear() instead of a pointer
with g_cond_new() and _free().

https://bugzilla.gnome.org/show_bug.cgi?id=660739
2011-10-04 11:13:46 -04:00
Matthias Clasen
0d1a92ca3d Add new thread creation API
Deprecate both g_thread_create functions and add
g_thread_new() and g_thread_new_full(). The new functions
expect a name for the thread.

Change GThreadPool, GMainContext and GDBus to create named threads.

https://bugzilla.gnome.org/show_bug.cgi?id=660635
2011-10-02 22:11:58 -04:00
Ryan Lortie
f35362f3ae libglib: drop use of GStaticMutex
Use GMutex directly instead.
2011-09-21 15:55:36 -04:00
Ryan Lortie
f202946146 gmain: fix some win32 build errors 2011-09-17 17:33:48 -04:00
Ryan Lortie
01ed78d525 mainloop: detect fork() and abort
Abort if the child process returns to the mainloop after a fork().

https://bugzilla.gnome.org/show_bug.cgi?id=658999
2011-09-14 14:09:07 -04:00
Ryan Lortie
644ab6a7d3 Nix inaccurately named g_main_context_init_pipe()
...and fold its contents into g_main_context_new()
2011-09-09 22:33:33 -04:00
Ryan Lortie
1c8c408c51 gmain: get rid of poll_waiting
This variable, which is the cause of much grief, exists for two reasons:

  - ensuring the the wakeup pipe doesn't fill up

  - preventing the first poll() after adding a source from waking up
    immediately

The first point is no longer an issue with GWakeup.

The second point is addressed by using different logic: we only signal a
wakeup in the case that the context is currently acquired by a thread
that is not us.

As an added bonus, we can now implement g_main_context_wakeup() without
taking a lock.

https://bugzilla.gnome.org/show_bug.cgi?id=583511
https://bugzilla.gnome.org/show_bug.cgi?id=320888
2011-09-09 22:32:06 -04:00
Ryan Lortie
d86386159d glib worker: move to glib-private framework
Remove the private glib_get_worker_context() symbol and move it over to
using the glib-private stuff like GWakeup is doing.

https://bugzilla.gnome.org/show_bug.cgi?id=657992
2011-09-09 14:32:00 -04:00
Ryan Lortie
b891b3616f GMainLoop: remove wall clock time cache
Since GMainLoop is now purely monotonic, it really doesn't make sense to
cache the wallclock time just for the sake of making a deprecated call
more efficient.
2011-09-09 13:41:36 -04:00
Ryan Lortie
ba7019e19e Modify child and signal sources to use worker 2011-09-09 13:41:27 -04:00
Ryan Lortie
7eae486179 GMain: simplify logic for g_wakeup_acknowledge()
Instead of messing around with context->poll_waiting, just look at the
GPollFD to see if the GWakeup needs to be acknowledged.
2011-09-09 13:41:27 -04:00
Ryan Lortie
87880dfa57 GMainLoop: remove single-threaded case
Since we now always have thread support in libglib, we can remove the
buggy single-threaded codepath for GMainContext.
2011-09-09 13:41:27 -04:00
Ryan Lortie
1facd36d00 Add private glib_get_worker_context() API
The first time this is called, this creates a GMainContext * and a
thread to run it.  Future calls return the same.  There are a lot of
places that we could use this in GLib.
2011-09-09 13:40:50 -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
Ryan Lortie
3b25e975b3 gtk-doc fixups for glib/ 2011-09-05 11:30:58 -04:00
Pavel Holejsovsky
fe4fc3e8b5 Make GMainLoop, GMainContext and GSource boxed types
Also add some annotations for better usage of these types in bindings.

https://bugzilla.gnome.org/show_bug.cgi?id=657725
2011-08-31 09:37:51 +02:00
Dan Winship
2955981569 g_get_monotonic_time: fix race condition
Since there was nothing guaranteeing synchronization of the
assignments to checked and clockid, it would be possible for one
thread to set clockid = CLOCK_MONOTONIC, and for another thread to see
checked = TRUE but still clockid = CLOCK_REALTIME.

https://bugzilla.gnome.org/show_bug.cgi?id=655129
2011-08-30 21:16:03 -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
Colin Walters
f0db0d22cc gmain: Clarify that timeouts are in terms of monotonic time
Also note that monotonic time does not include time spent while
suspended (at least on Linux).

https://bugzilla.gnome.org/show_bug.cgi?id=655129
2011-08-22 07:15:16 -04:00
Ryan Lortie
777e40989e port GMainContext to GWakeup 2011-07-25 15:30:35 +02:00
Ryan Lortie
a0ed253718 move 'Since:' tags down
gtk-doc wants the Since: tag to be the absolute last thing in the docs
comment.
2011-07-22 15:47:24 +02:00
Colin Walters
1b0e5e7683 gmain: Fall back to pipes if kernel doesn't support EFD_CLOEXEC for eventfd()
Also remove the caching of checking for eventfd; just try it every time, it's
cheap enough to do so.

https://bugzilla.gnome.org/show_bug.cgi?id=653570
2011-06-28 10:03:15 -04:00
Colin Walters
3904c8761a gmain: use Linux eventfd() for main context wake up
The Linux eventfd() call is basically tailor made for the main loop
wake up pipe - all we want is a threadsafe way to write to a file
descriptor, and wake up the context on the other end; we don't care
about the content at all.

The eventfd manual page basically explains the benefits:

       Applications can use an eventfd file descriptor instead of a
       pipe (see pipe(2)) in all cases where a pipe is used simply to
       signal events.  The kernel overhead of an eventfd file
       descriptor is much lower than that of a pipe, and only one file
       descriptor is required (versus the two required for a pipe).

When writing my multithreaded spawn test case I actually hit the 1024
file descriptor limit quickly, because we used 2 fds per main context.
This brings that down to 1.

https://bugzilla.gnome.org/show_bug.cgi?id=653140
2011-06-21 23:28:52 -04:00
Colin Walters
c9f883f133 gmain: Close race condition in _g_main_wake_up_all_contexts()
Running gthread/tests/spawn-multithreaded in a loop, I very easily hit:

GLib-CRITICAL **: g_main_context_wakeup: assertion `g_atomic_int_get (&context->ref_count) > 0' failed

Testing the refcount still left a window where we would fall into the
assertion.  Fix this by just locking the context.
2011-06-14 19:23:36 -04:00
Colin Walters
211d7adf6e gmain: Only run through signal delivery once per read()
This is what I intended to do before.

https://bugzilla.gnome.org/show_bug.cgi?id=652072
2011-06-14 19:23:36 -04:00
Colin Walters
ed827deb77 gmain: Use sigset_t for keeping track of installed signals
Minor code cleanup.

https://bugzilla.gnome.org/show_bug.cgi?id=652072
2011-06-14 19:23:36 -04:00
Ryan Lortie
8073759f8c Remove all uses of G_CONST_RETURN
Just use 'const'.

https://bugzilla.gnome.org/show_bug.cgi?id=644611
2011-06-09 11:15:40 -04:00
Colin Walters
f0620902b2 Update annotations from gobject-introspection/gir/glib-2.0.c
This covers most of them.
2011-06-07 17:07:46 -04:00
Matthias Clasen
75f7eef9cd Fix doc typos
Now with fewer broken links...
2011-06-04 14:43:52 -04:00
Paolo Bonzini
c5d9a46394 avoid quadratic behavior of GMainLoop when all fd's have the same priority
https://bugzilla.gnome.org/show_bug.cgi?id=640518
2011-06-04 00:00:24 -04:00
Colin Walters
c34a6a66e7 gmain: Consolidate UNIX signal init state handling
For a future signalfd() patch, it will be easier to handle if
we don't separate initialization from watching for a particular
signal.

https://bugzilla.gnome.org/show_bug.cgi?id=651725
2011-06-03 11:38:18 -04:00
Colin Walters
6ea274bca4 gmain: Clean up SIGCHLD handling
Unify it more with the rest of the signal handling code.  There's
no reason not to specify SA_RESTART and SA_NOCLDSTOP for flags
always, so just do it.

Remove unnecessary initialization, and push the internal API
towards just ensure_unix_signal_handler_installed_unlocked().

https://bugzilla.gnome.org/show_bug.cgi?id=651725
2011-06-03 11:38:18 -04:00