Commit Graph

439 Commits

Author SHA1 Message Date
Dan Winship
2357f67b1b gmain: handle child sources being destroyed before parent
Fix a crash when a child source is destroyed before its parent. Also,
add a test case for this and the previous fix.
2012-07-18 15:08:44 -04:00
Dan Winship
ee6e66cb44 g_source_add_child_source: sync blocked state
Child sources are supposed to be blocked when their parents are, so
when adding a source to a blocked source, block the child too. Fixes a
warning when unblocking the parent.
2012-07-18 14:19:36 -04:00
Colin Walters
f7abd3ce13 Add g_spawn_check_exit_status()
Many (if not "almost all") programs that spawn other programs via
g_spawn_sync() or the like simply want to check whether or not the
child exited successfully, but doing so requires use of
platform-specific functionality and there's actually a fair amount of
boilerplate involved.

This new API will help drain a *lot* of mostly duplicated code in
GNOME, from gnome-session to gdm.  And we can see that some bits even
inside GLib were doing it wrong; for example checking the exit status
on Unix, but ignoring it on Windows.

https://bugzilla.gnome.org/show_bug.cgi?id=679691
2012-07-10 18:03:56 -04:00
Dan Winship
55bac5da0a GMainContext: reorganize source list to avoid O(n) behavior
Rather than having a single priority-ordered list of GSources, store a
list of queues of each priority level. This means that adding a source
is now O(n) in the number of unique priority levels currently being
used, rather than O(n) in the total number of sources.

https://bugzilla.gnome.org/show_bug.cgi?id=619329
2012-06-26 08:40:32 -04:00
Dan Winship
aaaaab91de gmain: add GSourceIter
add an explicit iterator for GMainContext sources

https://bugzilla.gnome.org/show_bug.cgi?id=619329
2012-06-26 08:40:31 -04:00
Dan Winship
8e65c30431 gmain: rename some variables for clarity
https://bugzilla.gnome.org/show_bug.cgi?id=619329
2012-06-26 08:40:31 -04:00
Dan Winship
532f463eaf gmain: child sources must always have same priority as parent
A child source does not have a priority of its own; it must have the
same priority as its parent. Enforce this in
g_source_set_priority_unlocked().

https://bugzilla.gnome.org/show_bug.cgi?id=619329
2012-06-26 08:40:31 -04:00
Ryan Lortie
d981d79a42 GSource: initialise ->priv on construct
For efficiency, we waited until setting up child sources to allocate
->priv.  Simplify things a bit by allocating it from the start.

https://bugzilla.gnome.org/show_bug.cgi?id=619329
2012-06-26 08:40:31 -04:00
Matthias Clasen
d0c8895a07 GWakeup: Avoid extraneous wakeups
We were checking the wrong number here, and waking up unnecessarily.
https://bugzilla.gnome.org/show_bug.cgi?id=678052
2012-06-15 15:16:13 -04:00
Dan Winship
a49568cecc gmain: block child sources when blocking the parent
When blocking a source that has child sources, we need to consider the
children blocked as well. Otherwise they will still trigger repeatedly
in an inner loop started from the parent source's callback.

https://bugzilla.gnome.org/show_bug.cgi?id=669260
2012-04-16 13:47:27 -04:00
Robert Ancell
4143842eb4 Add missing allow-none annotations for function parameters.
Found using:
find . -name '*.c' | xargs grep 'or %NULL' | grep ' \* @' | grep -v '@error' | grep -v allow-none
2012-03-31 20:34:28 +11:00
Bastien Nocera
9b0734a09c all: s/availible/available/ 2012-03-27 11:01:00 +02:00
Colin Walters
6833385c5a gmain: Use sig_atomic_t for list of pending Unix signals
Pointed out by: Simon McVittie <simon.mcvittie@collabora.co.uk>

https://bugzilla.gnome.org/show_bug.cgi?id=671997
2012-03-16 16:15:16 -04:00
Dan Winship
1542e898f9 gmain: fix a bunch of comment typos in g_get_monotonic_time()
And remove a comment about Windows in the fallback implementation that
no longer applies, since there's now a separate Windows-specific
implementation.
2012-01-26 09:54:50 -05:00
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
01ed78d525 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
David Schleef
b92861b5a0 main: Use public function in documentation
https://bugzilla.gnome.org/show_bug.cgi?id=651009
2011-05-26 20:56:51 -04:00
Colin Walters
542215b78a Rename g_unix_pipe_flags to g_unix_open_pipe
From IRC discussion, people liked this name more.

https://bugzilla.gnome.org/show_bug.cgi?id=649322
2011-05-03 23:34:17 -04:00
Colin Walters
ed37970a04 g_unix_set_fd_nonblocking: New API to control file descriptor blocking state
And use it in relevant places in GLib.

https://bugzilla.gnome.org/show_bug.cgi?id=649225
2011-05-03 10:14:48 -04:00
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
Colin Walters
549d895fa4 glib-unix: New API to watch some Unix signals
This new API allows watching a few select Unix signals;
looking through the list on my system, I didn't see anything
else that I think it'd reasonable to watch.

We build on the previous patch to make the child watch helper thread
that existed on Unix handle these signals in the threaded case.
In the non-threaded case, they're just global variables.

https://bugzilla.gnome.org/show_bug.cgi?id=644941
2011-04-27 16:01:39 -04:00
Colin Walters
920899d78f gmain: Prepare child watch handling for more generic signal handling
In preparation for supporting more Unix signals such as SIGHUP,
SIGTERM etc.,

https://bugzilla.gnome.org/show_bug.cgi?id=644941
2011-04-27 14:58:36 -04:00
Colin Walters
0ff211f520 glib-unix: New Unix-specific API
GLib historically has been designed to be "mostly" portable; there
are some functions only available on Unix like g_io_channel_unix_new(),
but these are typically paired with obvious counterparts for Win32.

However, as GLib is used not only by portable software, but components
targeting Unix (or even just Linux), there are a few cases where it
would be very convenient if GLib shipped built-in functionality.

This initial patch is a basic wrapper around pipe2(), including
fallbacks for older kernels.  This pairs well with the
existing g_spawn_*() API and its child_setup functionality.

However, in the future, I want to add a signal() wrapper here,
complete with proxying the signal to a mainloop.  I have initial code
for this, but doing it sanely (including factoring out gmain.c's
private worker thread), is a complex task, and I don't want to block
on that.

See also gwin32.h for Win32 specific functionality.

https://bugzilla.gnome.org/show_bug.cgi?id=644941
2011-04-27 13:29:38 -04:00
Dan Winship
784619bc3a Fix two leaks seen when using TLS connections
g_tls_certificate_list_new_from_file() was leaking the file contents,
and GSource was leaking the GSourcePrivate structure that got
created when using child sources.
2011-04-07 08:32:06 -04:00
Emmanuele Bassi
08f0a31289 Revert "Remove all uses of G_CONST_RETURN"
This reverts commit 36741245cc.

The removal has not been discussed, except on Bugzilla:

https://bugzilla.gnome.org/show_bug.cgi?id=644611
2011-03-15 09:03:28 +00:00
Ryan Lortie
36741245cc Remove all uses of G_CONST_RETURN
Just use 'const'.
2011-03-15 01:32:22 -04:00
Emilio Pozuelo Monfort
89ca0f7296 Document g_timeout_add_seconds first call latency
And fix /timeout/rounding to not fail if the first call
happens after 2 seconds.

https://bugzilla.gnome.org/show_bug.cgi?id=644552
2011-03-12 15:51:44 +00:00
Matthias Clasen
121ce56fe1 Go back to the old logic in set_expiration
It was more complicated, but also more correct...
Also add a test to ensure that our rounding works as expected.
https://bugzilla.gnome.org/show_bug.cgi?id=643795
2011-03-06 22:38:17 -05:00
Ryan Lortie
c2fbef4125 Bug 642052 - g_timeout_add(_seconds) overflow
Fix integer overflow error.
2011-02-14 23:23:33 -05:00
Dan Winship
3c59c38404 Fix g_source_add_child_source docs
https://bugzilla.gnome.org/show_bug.cgi?id=640823
2011-01-28 10:18:42 -05:00
Damien Lespiau
beec9743eb gmain: Add Since: 2.28 tag to g_source_{add,remove}_child_source
New API should have gtk-doc tags to document the version it was
introduced.

Signed-off-by: Javier Jardón <jjardon@gnome.org>
2010-12-01 01:12:32 +01:00
Dan Winship
d15cdbefec gmain: add g_source_add_child_source and g_source_remove_child_source
This adds "child source" support to GSource. A child source behaves
basically like a GPollFD; when you add a source to a context, all of
its child sources are added with the same priority; when you destroy a
source, all of its child sources are destroyed; and when a child
source triggers, its parent source's dispatch function is run.

Use cases include:

    - adding a GTimeoutSource to another source to cause the source to
      automatically trigger after a certain timeout.

    - wrapping an existing source type with a new type that has
      a different callback signature

    - creating a source that triggers based on different conditions
      at different times.

https://bugzilla.gnome.org/show_bug.cgi?id=634239
2010-11-26 15:07:28 -05:00
Dan Winship
ece936e84d gmain: fix some silly code in a programmer-error case
Previously if a source got finalized while still attached to a
context, it would warn and re-ref the source. But then it just freed
it anyway... So keep the warning but drop the re-ref.

https://bugzilla.gnome.org/show_bug.cgi?id=634239
2010-11-26 15:07:28 -05:00
Dan Winship
b358202856 gmain: move finalization of GSource outside of context lock
This avoids ugly deadlock situations such as in
https://bugzilla.gnome.org/show_bug.cgi?id=586432

https://bugzilla.gnome.org/show_bug.cgi?id=626702

https://bugzilla.gnome.org/show_bug.cgi?id=634239
2010-11-26 15:07:28 -05:00
Ryan Lortie
e4ad3442c0 GMainContext: store real time as int64 2010-11-02 22:39:09 -04:00
Ryan Lortie
5dab4727ee Add g_get_real_time() for wall-clock int64 micros
Similar in spirit to g_get_monotonic_time().
2010-11-02 22:39:09 -04:00
Ryan Lortie
92df8a1d77 Drop GTimeSpec type 2010-11-02 22:39:09 -04:00
Ryan Lortie
c3a0d32ef1 Switch GTimeSpec users to int64 microseconds
glib is trying to move toward using microseconds-in-gint64 as its
universal time format.

No real API breaks here since GTimeSpec is new this unstable release
series.
2010-11-02 22:39:09 -04:00
Ryan Lortie
d9f5ab56c3 GTimeout: simplify math for 'seconds' case
The code was designed to deal with any granularity of timer and due to
the use of GTimeVal/GTimeSpec, the math for this gets extremely
confusing.

From a practical standpoint, we only ever have a granularity of seconds.

Take advantage of that fact in the code and vastly simplify the math.
2010-11-02 22:39:09 -04:00
Ryan Lortie
2af4b6e544 Deprecate g_source_get_current_time() 2010-10-27 09:22:13 -04:00
Ryan Lortie
91113a8aee switch GTimeoutSource to use monotonic time 2010-10-27 09:22:12 -04:00
Ryan Lortie
b7d8363fbe Add g_source_get_time()
Cached version of g_get_monotonic_time() that does similar to what
g_source_get_current_time() does for g_get_current_time().
2010-10-27 09:22:12 -04:00
Ryan Lortie
bf941f200c Rename time_is_current to current_time_is_fresh
Internal structure field; no semantic changes.
2010-10-27 09:22:12 -04:00
Ryan Lortie
ab548d240a Add g_get_monotonic_time()
Gets the system monotonic time on systems that have it.  Otherwise, call
g_get_current_time().
2010-10-27 09:22:12 -04:00
Ryan Lortie
ac82e74895 Add 'GTimeSpec' as 'struct timespec' equivalent 2010-10-27 09:22:12 -04:00
Ryan Lortie
92974b80fc Bug 618737 - "dispatch to context" functionality
Adds a new function g_main_context_invoke() (and _full() variant).

This function takes a main context, a function and a user_data.  If the
main context is already acquired in the current thread, the function is
invoked directly.  If the main context is the default main context of
the current thread and it can be acquired then the function is invoked
directly while the context is owned.  Otherwise, the function is
scheduled as an idle on the context.
2010-10-03 17:34:16 -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
581e68b7d3 gmain: Define _GNU_SOURCE before including glibconfig.h
As it pulls in unistd.h from something else.
2010-09-04 18:15:15 +01:00
Matthias Clasen
04077ff5c5 More include cleanups 2010-09-03 23:03:14 -04:00
Matthias Clasen
358b9d6ac7 Move main loop docs inline 2010-07-10 23:56:45 -04:00
Ryan Lortie
2e53e50244 glib/: fully remove galias hacks 2010-07-07 19:34:35 -04:00
Havoc Pennington
6b53e4826f GSource: add g_source_set_name, g_source_get_name, g_source_set_name_by_id
These allow applications to give meaningful names to their sources.
Source names can then be used for debugging and profiling, for
example with systemtap or gdb.

https://bugzilla.gnome.org/show_bug.cgi?id=606044
2010-05-25 16:59:22 -04:00
Havoc Pennington
e5696c282e GSource: add g_source_set_name, g_source_get_name, g_source_set_name_by_id
These allow applications to give meaningful names to their sources.
Source names can then be used for debugging and profiling, for
example with systemtap or gdb.

https://bugzilla.gnome.org/show_bug.cgi?id=606044
2010-05-25 13:45:28 -04:00
Dan Winship
4363f1932f Add g_main_context_push_thread_default() etc
This allows applications to use async methods from other threads, or
in multiple independent main loops.

http://bugzilla.gnome.org/show_bug.cgi?id=579984
2009-07-01 09:02:23 -04:00
Matthias Clasen
440bf5bee5 Use pipe2 when available
This avoids a small window for races between pipe and fdset.
Reported in bug 579933 by Thiago Macieira.
2009-06-19 23:44:29 -04:00
Matthias Clasen
00151ec0e1 Fix a locking problem in g_main_context_iterate()
We failed to ensure that the context is locked on every exit of
the function. This fixes bug 583324.
2009-05-27 12:04:35 -04:00
Ryan Lortie
8df23d2283 trivial spelling/whitespace fixes
svn path=/trunk/; revision=8011
2009-03-17 23:03:33 +00:00
Matthias Clasen
0f6b25ca96 Fix some compiler warnings
svn path=/trunk/; revision=7755
2008-12-31 05:51:47 +00:00
Matthias Clasen
40e192abf2 Add more docs
svn path=/trunk/; revision=7545
2008-09-26 14:05:03 +00:00
Tor Lillqvist
fc542a462a Bug 553820 - gpoll.c: undeclared identifier
2008-09-25  Tor Lillqvist  <tml@novell.com>

	Bug 553820 - gpoll.c: undeclared identifier

	* glib/gmain.c
	* glib/gpoll.c: Make the g_poll() function non-static also on
	Windows. Prefix an underscore to the g_main_poll_debug variable
	and make it non-static in gmain.c so that it can be used in
	gpoll.c. Add back missing variable declaration.


svn path=/trunk/; revision=7542
2008-09-25 19:59:49 +00:00
Sven Herzberg
ee685b003e Be a little more explcit in the docs. Includes Owen's requested changes.
2008-09-24  Sven Herzberg  <sven@imendio.com>

	Be a little more explcit in the docs. Includes Owen's requested
	changes.

	* glib/gmain.c: improved documentation for g_source_attach() and
	g_source_destroy()


svn path=/trunk/; revision=7539
2008-09-24 13:44:27 +00:00
Dan Winship
ac68024ec1 Move this out of gmain.c and make it part of the public API. (Part of Bug
* glib/gpoll.c (g_poll): Move this out of gmain.c and make it part
	of the public API. (Part of Bug 505361 - gunixinputstream.c
	assumes poll() available.)

svn path=/trunk/; revision=7535
2008-09-23 16:32:30 +00:00
Tor Lillqvist
f911ead382 Fix embarrassing bug: I was passing an incorrect third parameter to
2008-09-23  Tor Lillqvist  <tml@novell.com>

	* glib/gmain.c (poll_rest) [Win32]: Fix embarrassing bug: I was
	passing an incorrect third parameter to memmove(), had forgotten
	to multiply by the size of the table entry. Just use a for loop
	instead, clearer. Odd I didn't notice when testing this code.


svn path=/trunk/; revision=7533
2008-09-23 15:35:12 +00:00
Matthias Clasen
b36ea0b1c7 Bug 523463 – Core dump in gmain.c:2482:IA__g_main_context_check()
2008-09-09  Matthias Clasen  <mclasen@redhat.com>

        Bug 523463 – Core dump in gmain.c:2482:IA__g_main_context_check()

        * glib/gmain.c (g_main_context_check): Be robust against setting
        event fields on the fly, as e.g. happens in linc. Tracked down
        by Paul Smith, fix proposed by Owen Taylor.

svn path=/trunk/; revision=7447
2008-09-09 06:04:21 +00:00
Tor Lillqvist
605682521b Rework the g_poll() implementation on Windows to match poll() semantics
2008-08-21  Tor Lillqvist  <tml@novell.com>

	* glib/gmain.c: Rework the g_poll() implementation on Windows to
	match poll() semantics more closely. This makes the test program
	in bug #468910 behave better and doesn't seem to break anything
	else.

	If polling several GPollFDs, i.e. messages and/or waitable
	handles, first check if one or several of them are in the
	signalled state right away, and return indication for all that are
	in that case.

	If not, then poll with timeout and indicate only the single one
	that the Win32 wait function tells us as before.

	Remove unnecessary ifdefs, as we always have G_MAIN_POLL_DEBUG
	defined on Windows.

	Initialise g_main_poll_debug in g_main_context_new() so we have it
	before testing it in one case.

	Don't add several copies of a handle in the array of handles to
	wait for. The documentation says this is not allowed, although it
	did seem to work fine in practise. But do as the documentations
	says anyway.


svn path=/trunk/; revision=7375
2008-08-21 02:27:13 +00:00
Tor Lillqvist
c9211d68fc MSDN says: "Do not cast a pointer to a FILETIME structure to either a
2008-08-04  Tor Lillqvist  <tml@novell.com>

	* glib/gmain.c (g_get_current_time): MSDN says: "Do not cast a
	pointer to a FILETIME structure to either a LARGE_INTEGER* or
	__int64* value because it can cause alignment faults on 64-bit
	Windows." So don't do that then. Indeed the code did work randomly
	on Win64 when compiled with optimisation.


svn path=/trunk/; revision=7308
2008-08-04 19:22:05 +00:00
Tor Lillqvist
0e2384faa8 glib/giowin32.c glib/gmain.c glib/gspawn-win32.c Change gssize casts
2008-08-04  Tor Lillqvist  <tml@novell.com>

	* glib/giowin32.c
	* glib/gmain.c
	* glib/gspawn-win32.c
	* glib/gspawn-win32-helper.c: Change gssize casts introduced on
	2008-07-28 to gintptr casts now that we have that. gssize is as
	such the same as gintptr on both 32- and 64-bit Windows, but the
	gintptr name indicates that it is used to hold pointers, i.e. also
	HANDLEs.


svn path=/trunk/; revision=7306
2008-08-04 18:46:59 +00:00
Tor Lillqvist
a3fa74853a Fix problems on 64-bit Windows. Avoid warnings, some of which indicated
2008-07-28  Tor Lillqvist  <tml@novell.com>

	Fix problems on 64-bit Windows. Avoid warnings, some of which
	indicated actual problems, some which were just annoyances. 

	Where casts to an integer type are needed for pointers, use
	gssize. Technically intptr_t would be the more proper type, but we
	still want to be compilable with MSVS6 and 7 which don't have
	intptr_t. MSVS8 and 9 do have intptr_t, but in <crtdefs.h>, not
	<stdint.h>.

	Use %p to print out handles. Use gssize casts when assigning
	GPollFD::fd fields.

	Use G_GSIZE_FORMAT when printing size_t values.
	
	* configure.in: Define automake conditional G_OS_WIN32_X64 which
	is true on Win64.

	* glib/giochannel.h: Use slightly different prototype for
	g_io_channel_win32_new_messages() on Win64 with gsize instead of
	guint.

	* glib/giowin32.c
	* glib/gmain.c
	* glib/gspawn-win32.c
	* tests/testglib.c: Generic changes as described above.

	* glib/gmain.h: Don't bother mentioning GIMP in comment.

	* glib/grel.c (tuple_hash_2): Use all bits of pointer.

	* glib/gspawn-win32.c
	* glib/gspawn-win32-helper.c: Use gssize types in the
	communication between parent and helper process, so that we can
	pass process handles, which are pointers, also on Win64.

	* glib/gtimer.c (g_time_val_to_iso8601): time_t is 64 bits on
	Win64 so we can't pass the address of a GTimeVal::tv_sec which is
	a long directly to gmtime(). On the other hand, changing
	GTimeVal::tv_sec to be a gint64 on Win64 is not really feasible
	either, as that would then require changes in much code that uses
	GTimeVals.

	* glib/gspawn-win32.c
	* glib/Makefile.am: Call the helper programs
	gspawn-win64-helper.exe and gspawn-win64-helper-console.exe on
	Win64, to avoid potential risk of running a 32-bit version of the
	helper.


svn path=/trunk/; revision=7260
2008-07-28 00:24:14 +00:00
Matthias Clasen
fef22bfe23 Add a g_return_val_if_fail check in both versions. Proposed by Patrik
* glib/gmain.c (g_get_current_time): Add a g_return_val_if_fail
        check in both versions. Proposed by Patrik Olsson in bug 540545.

svn path=/trunk/; revision=7142
2008-07-02 16:16:27 +00:00
Matthias Clasen
4c78992dbf Don't leak the pipes to child processes. Patch by Thiago Macieira.
* glib/gmain.c (g_main_context_init_pipe): Don't leak the
        pipes to child processes. Patch by Thiago Macieira.


svn path=/trunk/; revision=7037
2008-06-13 14:11:03 +00:00
Tor Lillqvist
a689811a41 glib/gmain.c Clarify what a "child pid" is in the doc comments.
2008-06-11  Tor Lillqvist  <tml@novell.com>

	* glib/gmain.c
	* glib/gspawn.c: Clarify what a "child pid" is in the doc
	comments.


svn path=/trunk/; revision=6995
2008-06-11 06:57:22 +00:00
Tor Lillqvist
2ded70ee94 Improve debugging printouts. When G_MAIN_POLL_DEBUG is defined, we check
2008-05-17  Tor Lillqvist  <tml@novell.com>

	* glib/gmain.c: Improve debugging printouts. When
	G_MAIN_POLL_DEBUG is defined, we check for an environment variable
	of the same name to decide whether to print out debugging
	information or not. G_MAIN_POLL_DEBUG is always defined on Windows
	as there is more often a need to debug this stuff there. On Unix
	the definition has to be uncommented (or done on the compile
	command line).


svn path=/trunk/; revision=6897
2008-05-17 02:25:59 +00:00
13:24:13 Tim Janik
02e2b95393 renamed GMainDispatch.dispatching_sources to be more descriptive and
2008-05-02 13:24:13  Tim Janik  <timj@imendio.com>

        * glib/gmain.c: renamed GMainDispatch.dispatching_sources to be more
        descriptive and distinguishable within the source file.


svn path=/trunk/; revision=6874
2008-05-02 11:22:10 +00:00
Matthias Clasen
ccd3ec90bf Make the fix for bug 448943 work.
2008-04-04  Matthias Clasen  <mclasen@redhat.com>

        * glib/gmain.c: Make the fix for bug 448943 work.



svn path=/trunk/; revision=6826
2008-04-04 13:06:14 +00:00
Matthias Clasen
7f82bb3196 Bug 448943 – g_timeout_add_seconds() problems
2008-04-03  Matthias Clasen  <mclasen@redhat.com>

        Bug 448943 – g_timeout_add_seconds() problems

        * glib/gmain.c (g_timeout_set_expiration): Prevent expiration
        time going negative. Reported by Cody Russell, analyzed by
        Olivier Crete, patch by Sjoerd Simons.


svn path=/trunk/; revision=6814
2008-04-03 04:51:16 +00:00
Tor Lillqvist
d8fa7b34d2 Improve fix for #525192 below: Use SleepEx() so that the sleep is
2008-03-31  Tor Lillqvist  <tml@novell.com>

	* glib/gmain.c (g_poll): Improve fix for #525192 below: Use
	SleepEx() so that the sleep is alertable. Thanks to John
	Ehresman.


svn path=/trunk/; revision=6794
2008-03-31 18:05:47 +00:00
Tor Lillqvist
3e877f984e Bug 525192 - 100% CPU if run main loop with no IO sources
2008-03-31  Tor Lillqvist  <tml@novell.com>

	Bug 525192 - 100% CPU if run main loop with no IO sources

	* glib/gmain.c (g_poll) [Win32]: Patch by Neil Roberts.


svn path=/trunk/; revision=6787
2008-03-31 07:37:17 +00:00
Tor Lillqvist
d01acfe811 Further patch by Vlad Grecescu: Drop the code path that called
2008-02-26  Tor Lillqvist  <tml@novell.com>

	* glib/gmain.c (g_poll): Further patch by Vlad Grecescu: Drop
	the code path that called WaitMessage(), as WaitMessage()
	doesn't offer any chance for APCs to run. Instead just use the
	code path with MsgWaitForMultipleObjectsEx() even for the
	wait-only-for-messages case. (#517484)


svn path=/trunk/; revision=6597
2008-02-26 17:26:28 +00:00
Tor Lillqvist
6eb2b42715 Use alertable wait functions so that I/O completion routines or user-mode
2008-02-24  Tor Lillqvist  <tml@novell.com>

	* glib/gmain.c (g_poll) [Win32]: Use alertable wait functions so
	that I/O completion routines or user-mode Asynchronous Procedure
	Calls can be run. (#517484, Vlad Grecescu)


svn path=/trunk/; revision=6571
2008-02-24 01:46:42 +00:00
Matthias Clasen
d2f111fca7 Require gtk-doc 1.8.
2007-11-25  Matthias Clasen  <mclasen@redhat.com>

        * configure.in: Require gtk-doc 1.8.

        * glib/gasyncqueue.c:
        * glib/gdate.c:
        * glib/gfileutils.c:
        * glib/gmain.c:
        * glib/gmarkup.c:
        * glib/gregex.c:
        * glib/gtestutils.c:
        * glib/gutils.c: Use gtk-doc abbreviations for
        examples in doc comments.


svn path=/trunk/; revision=5933
2007-11-25 06:05:06 +00:00
Matthias Clasen
4abb6c13be Improve the docs. (#491974, Areg Beketovski)
2007-11-09  Matthias Clasen <mclasen@redhat.com>

        * glib/gmain.c (g_main_context_iteration): Improve the
        docs.  (#491974, Areg Beketovski)



svn path=/trunk/; revision=5850
2007-11-10 00:23:16 +00:00
Matthias Clasen
e8900bc3b7 More docs fixes
svn path=/trunk/; revision=5842
2007-11-09 03:33:35 +00:00
Matthias Clasen
58178261fd More doc fixes
svn path=/trunk/; revision=5840
2007-11-09 03:29:51 +00:00
Matthias Clasen
ed7e9b2459 Expand the docs a bit. (#317775, Søren Sandmann)
2007-11-08  Matthias Clasen <mclasen@redhat.com>

        * glib/gmain.c (g_main_loop_quit): Expand the docs
        a bit.  (#317775, Søren Sandmann)



svn path=/trunk/; revision=5833
2007-11-09 02:46:41 +00:00
Matthias Clasen
1c93d867fc Don't leak the condvar. (#479724, Areg Beketovski)
2007-11-07  Matthias Clasen <mclasen@redhat.com>

        * glib/gmain.c (g_main_context_unref): Don't leak the
        condvar.  (#479724, Areg Beketovski)


svn path=/trunk/; revision=5818
2007-11-08 03:53:41 +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
Matthias Clasen
34a9878985 Fix a doc formatting problem
svn path=/trunk/; revision=5766
2007-09-16 17:30:57 +00:00
Matthias Clasen
23cb7803c2 Coding style cleanups
svn path=/trunk/; revision=5651
2007-07-22 00:34:21 +00:00
Emmanuele Bassi
00ab83b8e8 Add full variant to the approximate timeout functiont
The g_timeout_add_seconds() API lacks a _full() counterpart, allowing the
setting of a destroy notification function to be invoked when the timeout
source is removed.

This patch adds g_timeout_add_seconds_full() to the public API and
reimplements g_timeout_add_seconds() as a call to g_timeout_add_seconds_full().

svn path=/trunk/; revision=5575
2007-06-18 16:55:50 +00:00
Matthias Clasen
b2d6494a5e Fix typos
svn path=/trunk/; revision=5558
2007-06-14 13:52:01 +00:00
Chris Wilson
af8671792d Replace a g_slist_prepend/g_slist_remove pair with an on-stack link and
2007-03-15  Chris Wilson  <chris@chris-wilson.co.uk>

	* glib/gmain.c (g_main_dispatch): Replace a
	g_slist_prepend/g_slist_remove pair with an on-stack link
	and open coding. (#416094)


svn path=/trunk/; revision=5407
2007-03-15 08:47:28 +00:00
Matthias Clasen
2d7fa2dd18 Readd a return which was removed as dead code a while ago. icc may
* glib/gmain.c (child_watch_helper_thread): Readd a
        return which was removed as dead code a while ago.
        icc may consider it dead, but gcc doesn't like non-void
        functions without a return...  (#354707)
2006-12-19 02:49:39 +00:00
Matthias Clasen
dc78f9b202 Improve the docs. (#345569, Tim-Philipp Müller)
2006-12-14  Matthias Clasen  <mclasen@redhat.com>

	* glib/gmain.c (g_child_watch_add_full): Improve the docs.
	(#345569, Tim-Philipp Müller)
2006-12-15 03:42:24 +00:00
Matthias Clasen
caecf2dda0 Add a check for broken poll on Mac OS X.
2006-12-12  Matthias Clasen  <mclasen@redhat.com>

        * configure.in: Add a check for broken poll on Mac OS X.

        * glib/gmain.c: Use poll emulation on OS X.  (#302672, Toby Peterson,
        patch by Dave Vasilevsky)
2006-12-12 20:04:45 +00:00
Matthias Clasen
3080ebdaa8 Fix typos in doc comments. (#358421, Tom Tromey)
2006-10-01  Matthias Clasen  <mclasen@redhat.com>

	* glib/gmain.c: Fix typos in doc comments.
	(#358421, Tom Tromey)
2006-10-01 05:35:29 +00:00
Matthias Clasen
f8c1c1f9e0 Add functions for approximate timeouts 2006-09-10 05:44:46 +00:00
Matthias Clasen
58ea1db43e Add Since tags. Fix Since tag. (#351583, Brian Cameron)
2006-08-15  Matthias Clasen  <mclasen@redhat.com>

        * glib/gbookmarkfile.c (g_bookmark_file_get_groups):
        * glib/gmain.c (g_source_is_destroyed): Add Since tags.
        * glib/gkeyfile.c (g_key_file_get_double_list): Fix
        Since tag.  (#351583, Brian Cameron)
2006-08-16 03:33:57 +00:00
Matthias Clasen
0c26468057 2.11.2 2006-06-05 17:34:53 +00:00
Matthias Clasen
03c90584b8 Don't leak the dispatch struct. (#321886)
2006-06-05  Matthias Clasen  <mclasen@redhat.com>

	* glib/gmain.c (get_dispatch): Don't leak the
	dispatch struct.  (#321886)
2006-06-05 15:02:51 +00:00
Matthias Clasen
a74af928cf fixups 2006-06-02 02:55:50 +00:00
Matthias Clasen
89a803beb4 More additions 2006-06-02 02:50:38 +00:00
Matthias Clasen
bef319723b Add two new functions, g_source_set_funcs and g_source_is_destroyed, that
2006-06-01  Matthias Clasen  <mclasen@redhat.com>

	* glib/glib.symbols:
	* glib/gmain.h:
	* glib/gmain.c: Add two new functions,
	g_source_set_funcs and g_source_is_destroyed,
	that will be necessary to solve thread-safety
	issues with idles in GTK+.  (#321886, Chris Wilson)
2006-06-02 02:36:30 +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
d0ee63840c use standard_calloc to allocate the profile_data. (#335209, Chris Wilson)
2006-03-20  Matthias Clasen  <mclasen@redhat.com>

        * glib/gmem.c (profiler_log): use standard_calloc to allocate
        the profile_data.  (#335209, Chris Wilson)

        * glib/gmain.c (g_main_context_unref): Avoid a deadlock.
        (#335207, Chris Wilson)

        Minor optimizations (#335216, Chris Wilson):

        * glib/gasyncqueue.c (g_async_queue_pop_intern_unlocked): Use
        g_queue_peek_tail_link instead of g_queue_peek_tail.

        * glib/glist.c:
        * glib/gslist.c: Avoid some memset calls.
2006-03-20 18:43:32 +00:00
Matthias Clasen
90bd00b055 Clarify the documentation of source ids a bit. (#325874, Dan Williams)
2006-01-05  Matthias Clasen  <mclasen@redhat.com>

	* glib/gmain.c: Clarify the documentation of source ids
	a bit.  (#325874, Dan Williams)
2006-01-05 21:07:55 +00:00
Matthias Clasen
796aa7e06e Small fixes 2006-01-03 12:01:05 +00:00
Michael Meeks
d2555b65ee new method to determine if the current thread is the owner of the context.
2005-12-20  Michael Meeks  <michael.meeks@novell.com>

	* glib/gmain.c (g_main_context_is_owner): new method
	to determine if the current thread is the owner of the
	context.
2006-01-03 10:24:07 +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
6d763bd97c Don't call cb_funcs->unref while holding the context lock. (#320886, Andy
2005-11-07  Matthias Clasen  <mclasen@redhat.com>

	* glib/gmain.c (g_main_dispatch): Don't call cb_funcs->unref
	while holding the context lock.  (#320886, Andy Wingo)
2005-11-07 20:15:48 +00:00
Matthias Clasen
229206165e Expand the docs. (#320466, Steffen Gutmann)
2005-11-04  Matthias Clasen  <mclasen@redhat.com>

        * glib/gmain.c (g_child_watch_source_new): Expand
        the docs.  (#320466, Steffen Gutmann)
2005-11-04 20:33:34 +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
Kjartan Maraas
2d3fff85d7 Remove some dead code. Closes bug #315278.
2005-09-11  Kjartan Maraas  <kmaraas@gnome.org>

	* glib/gmain.c: (g_child_watch_prepare), (g_child_watch_check),
	(child_watch_helper_thread): Remove some dead code. Closes
	bug #315278.
2005-09-11 15:20:52 +00:00
Matthias Clasen
b78a0792a4 Apply a patch which may make GLib work on BeOS again. (#309157, Kian
2005-06-30  Matthias Clasen  <mclasen@redhat.com>

	Apply a patch which may make GLib work on BeOS again.
	(#309157, Kian Duffy)

	* glib/gmain.c: Update the BeOS includes.

	* glib/gstdio.c:
	* glib/gutils.c (g_find_program_in_path):
	* glib/gbacktrace.c (g_on_error_stack_trace): Use the UNIX
	implementation on BeOS, as well.

	* configure.in: Don't put glib 1.0 into G_MODULE_LIBS, even
	on BeOS.
2005-06-30 19:43:48 +00:00
Matthias Clasen
0914ea84e3 Add a note regarding waitpid(-1).
2005-04-01  Matthias Clasen  <mclasen@redhat.com>

	* glib/gmain.c (g_child_watch_source_new): Add a note regarding
	waitpid(-1).
	(g_child_watch_source_init_multi_threaded):
	(g_child_watch_source_init_single): Don't use SA_RESTART,
	since it causes problems on at least one platform. (#168352)
2005-04-01 21:40:43 +00:00
Tor Lillqvist
8ced6d2478 [Win32] Use GetSystemTimeAsFileTime() instead of time() and
2005-03-29  Tor Lillqvist  <tml@novell.com>

	* glib/gmain.c (g_get_current_time): [Win32] Use
	GetSystemTimeAsFileTime() instead of time() and
	GetTickCount(). Much simpler.
2005-03-29 08:24:48 +00:00
Tor Lillqvist
52013430a4 If the event fired, assign f->revents=f->events. We can't know whether the
2005-03-29  Tor Lillqvist  <tml@novell.com>

	* glib/gmain.c (g_poll): If the event fired, assign
	f->revents=f->events. We can't know whether the upper layer using
	the event actually is readable, writeable or what, so say that all
	the conditions hold. Remove the ResetEvent() call that has been
	ifdeffed out anyway for a long time. Remove an "#ifdef 1" and
	#endif pair of lines, that code is not optional.
2005-03-29 08:00:53 +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
Manish Singh
f026692d2a glib/gasyncqueue.c glib/ghook.c g_return_if_fail -> g_return_val_if_fail
Mon Nov  8 10:45:50 2004  Manish Singh  <yosh@gimp.org>

        * glib/gasyncqueue.c
        * glib/ghook.c
        * glib/giochannel.c: g_return_if_fail -> g_return_val_if_fail

        * glib/gmain.c: Ditto, plus also make g_main_context_ref() actually
        return the passed in pointer.
2004-11-08 18:49:35 +00:00
Matthias Clasen
c83e52605f Make g_io_channel_ref(), g_main_context_ref(), g_hook_ref(),
2004-11-08  Matthias Clasen  <mclasen@redhat.com>

	* glib/gasyncqueue.[hc]:
	* glib/ghook.[hc]:
	* glib/gmain.[hc]:
	* glib/giochannel.[hc]: Make g_io_channel_ref(),
	g_main_context_ref(), g_hook_ref(), g_async_queue_ref()
	return the passed in pointer. (#151663, Manish Singh)
2004-11-08 18:26:56 +00:00
Matthias Clasen
0631238743 Initialize child_watch_count to 1, so that we don't miss the very first
2004-11-08  Matthias Clasen  <mclasen@redhat.com>

	* glib/gmain.c: Initialize child_watch_count to 1, so
	that we don't miss the very first child if it exits
	before we set up the child watch. In that case we had
	previously source->count == child_watch_count == 0,
	causing g_child_watch_check() to skip the waitpid()
	call.  (#154827, Gustavo Carneiro)

	* glib/gmain.c (g_child_watch_source_init_single)
	(g_child_watch_source_init_multi_threaded): Use sigaction()
	instead of signal().  (#136867, Jonas Jonsson, patch by
	Archana Shah)
2004-11-08 15:34:26 +00:00
Matthias Clasen
2e7514d052 Apply a patch to fix sparse warnings. (#154696, Kjartan Maraas)
2004-10-23  Matthias Clasen  <mclasen@redhat.com>

	* glib/gasyncqueue.c, glib/gatomic.c, glib/gdate.c,
	glib/giochannel.c, glib/gmain.c, glib/gspawn.c,
	glib/libcharset/localcharset.c: Apply a patch to fix
	sparse warnings. (#154696, Kjartan Maraas)
2004-10-24 01:37:42 +00:00
Matthias Clasen
4bc720a4a4 Document that GLib supports only a single callback per pid. (#154828,
2004-10-08  Matthias Clasen  <mclasen@redhat.com>

	* glib/gmain.c (g_child_watch_add_full):
	* glib/gmain.c (g_child_watch_add): Document that GLib supports only
	a single callback per pid. (#154828, Gustavo Carneiro)
2004-10-08 14:20:56 +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
Matthias Clasen
185c1de577 Merge from 2.4:
2004-05-10  Matthias Clasen  <mclasen@redhat.com>

	Merge from 2.4:

	* glib/gmain.c (block_source, unblock_source): Make these
	static.  (#142230, Morten Welinder)
2004-05-10 19:21:28 +00:00
Matthias Clasen
cbfb32bcff Only set time_is_current to FALSE if context->timeout is not zero.
2004-04-22  Matthias Clasen  <mclasen@redhat.com>

	* glib/gmain.c (g_main_context_query): Only set time_is_current to
	FALSE if context->timeout is not zero.  (#137795, Christian Krause)
2004-04-22 14:32:58 +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
Owen Taylor
9753964fe6 Fix the accidental revert of the fixes from #112222 that happened when the
Fri Mar 19 15:21:09 2004  Owen Taylor  <otaylor@redhat.com>

        * glib/gmain.c: Fix the accidental revert of the
        fixes from #112222 that happened when the GChildWatch
        code was added.
2004-03-19 20:25:03 +00:00
Owen Taylor
d261f3fbfc if _POLL_EMUL_H is defined, undefine HAVE_POLL to prefer our own poll()
Sun Mar 14 12:58:30 2004  Owen Taylor  <otaylor@redhat.com>

        * glib/gmain.c: if _POLL_EMUL_H is defined, undefine
        HAVE_POLL to prefer our own poll() emulation to the
        lame OS/X one. (#136956, Manish Singh)
2004-03-14 18:02:37 +00:00
Matthias Clasen
0f789811be Remove an extra semicolon. Spotted by Kjartan Maraas.
Thu Mar 11 02:05:13 2004  Matthias Clasen  <maclas@gmx.de>

	* glib/gmain.c (g_main_depth): Remove an extra semicolon.
	Spotted by Kjartan Maraas.
2004-03-11 01:03:12 +00:00
Sebastian Wilhelmi
c40b15fc6b Use the atomic integer operations for GMainContext and GMainLoop reference
2004-03-04  Sebastian Wilhelmi  <seppi@seppi.de>

	* glib/gmain.c: Use the atomic integer operations for GMainContext
	and GMainLoop reference counting.

	* glib/gmain.c: Hold the main_context_list lock, when iterating
	the list. Only call g_main_context_wakeup for positive reference
	count.
2004-03-04 10:12:55 +00:00
Owen Taylor
109ebb109a === Released 2.3.5 ===
Mon Mar  1 16:49:51 2004  Owen Taylor  <otaylor@redhat.com>

        * === Released 2.3.5 ===

        * configure.in: Version 2.3.5, interface ago 0.

        * NEWS: Some further updates.
2004-03-02 00:05:36 +00:00
Owen Taylor
44ef900675 Don't call waitpid() on a source that has already exited.
Mon Mar  1 15:49:09 2004  Owen Taylor  <otaylor@redhat.com>

        * glib/gmain.c (check_for_child_exited): Don't
        call waitpid() on a source that has already exited.

        * glib/gmain.c (g_child_watch_check): Return TRUE
        only if the child actually exited.
2004-03-01 20:56:47 +00:00
Owen Taylor
38cbfaeb7a Patch from J. Ali Harlow
Mon Mar  1 15:39:57 2004  Owen Taylor  <otaylor@redhat.com>

       Patch from J. Ali Harlow

        * configure.in: Use void * not HANDLE for GPid on win32.

        * glib/gspawn.[ch] glib/gspawn-win32.[ch] glib/glib.def:
        Add g_spawn_close_pid().

        * glib/gspawn.[ch]: Make g_spawn functions take
        GPid * instead if int * (GPid == int on unix, will
        produce compile warnings until fixed on Win32.)

        * tests/child-test.c: Make the test a little more
        inappropriately verbose.

        * glib/gmain.c: Add some documentation warnings about
        not closing @pid while the source is active.
2004-03-01 20:47:49 +00:00
Owen Taylor
3e8b3a13f5 Clarify doc comment.
Mon Mar  1 09:17:32 2004  Owen Taylor  <otaylor@redhat.com>

        * glib/gmain.c (g_main_depth): Clarify doc comment.
2004-03-01 14:20:30 +00:00
Owen Taylor
e1c15eb0d1 Fix leftover references to g_main_context_depth() in docs.
Sun Feb 29 21:42:47 2004  Owen Taylor  <otaylor@redhat.com>

        * glib/gmain.c: Fix leftover references to
        g_main_context_depth() in docs.
2004-03-01 02:45:15 +00:00
Owen Taylor
0875017ad1 Add g_main_depth() (Request from Tim Janik and Stefan Westerfeld)
Sun Feb 29 21:34:34 2004  Owen Taylor  <otaylor@redhat.com>

        * glib/gmain.[ch]: Add g_main_depth() (Request from
        Tim Janik and Stefan Westerfeld)
2004-03-01 02:41:09 +00:00
Hans Breuer
4d470362b2 updated externals, including those from bug #135386
2003-02-28  Hans Breuer  <hans@breuer.org>

	* glib/glib.def : updated externals, including those
	from bug #135386

	* glib/makefile.msc.in : build gatomic.c

	* glibconfig.h.win32.in : removed duplicate definition
	of G_MAXSIZE, typedef void* GPid instead of int

	* tests/child-test.c  glib/gmain.c :
	applied patch from J. Ali Harlow <ali@juiblex.co.uk> to fix
	g_child_watch implementation on win32, bug #50296
2004-02-28 13:03:55 +00:00
Hans Breuer
fc9afe0d21 added g_hash_table_find and a bunch of g_queue_*
2003-02-26 Hans Breuer  <hans@breuer.org>

	* glib/glib.def : added g_hash_table_find and a
	bunch of g_queue_*

	* glib/gmain.c : make it compile on win32,
	child_wake_up_pipe replaced by semaphore like it is done
	for the other wake_up_pipe

	* config.h.win32.in : added HAVE_INT64_AND_I64
	* glibconfig.h.win32.in : G_MAXSIZE .. G_M??INT64,
	and typedef for GPid

	* test/env-test.c : don't let the local log function
	collide in namespace with standard C
2004-02-25 23:48:22 +00:00
Matthias Clasen
e906108048 Include signal.h for SIGCHLD. (#134622, Damien Carbery)
Wed Feb 18 23:57:42 2004  Matthias Clasen  <maclas@gmx.de>

	* glib/gmain.c: Include signal.h for SIGCHLD.  (#134622, Damien
	Carbery)
2004-02-18 22:55:15 +00:00
Sebastian Wilhelmi
f18db7d2d4 Set context->wake_up_pipe only for G_THREADS_ENABLED.
2004-02-18  Sebastian Wilhelmi  <seppi@seppi.de>

	* glib/gmain.c (g_main_context_new): Set context->wake_up_pipe
	only for G_THREADS_ENABLED.
2004-02-18 09:14:17 +00:00
Matthias Clasen
540d02ba8b Wrap waitpid() as a GSource. This is a partial implementation of the "Unix
Sat Feb 14 01:21:34 2004  Matthias Clasen  <maclas@gmx.de>

	* glib/gmain.h:
	* glib/gmain.c (g_child_watch_source_new):
	* glib/gmain.c (g_child_watch_add):
	* glib/gmain.c (g_child_watch_add_full): Wrap waitpid() as a
	GSource. This is a partial implementation of the "Unix signal
	source".  (#50296, Jonathan R. Blandford)

	* configure.in: Add the necessary configury to typedef GPid
	appropriately.

	* tests/Makefile.am:
	* tests/child-test.c: Test child_watch sources.
2004-02-14 00:23:36 +00:00
Owen Taylor
3f1a49ea41 Set the return value from the result of g_main_context_check() (after we
Sat Nov  1 08:45:38 2003  Owen Taylor  <otaylor@redhat.com>

        * glib/gmain.c (g_main_context_iterate): Set the
        return value from the result of g_main_context_check()
        (after we poll) rather than g_main_context_prepare.
        (#121675, Padraig O'Briain)
2003-11-01 13:57:48 +00:00
Owen Taylor
2afc40f3a6 When DISABLE_MEM_POOLS is set, loop through and free the poll records
Mon Aug 25 12:17:20 2003  Owen Taylor  <otaylor@redhat.com>

        * glib/gmain.c (g_main_context_unref_and_unlock):
        When DISABLE_MEM_POOLS is set, loop through and free
        the poll records explicitely, since g_mem_chunk_destroy()
        won't do it. (#118121, Morten Welinder)
2003-08-25 16:20:41 +00:00
Tor Lillqvist
3f3bb7fef3 [Win32] Don't exceed handle array bounds. Warn if there would be too many
2003-08-15  Tor Lillqvist  <tml@iki.fi>

	* glib/gmain.c (g_poll): [Win32] Don't exceed handle array
	bounds. Warn if there would be too many handles to wait
	for. (WaitForMultipleObjects() has a relatively low limit of 64
	handles. The Win32 IO channel code should be fixed not to need to
	wait for one handle per file or socket being watched. Later.)
2003-08-15 05:06:16 +00:00
Owen Taylor
b51c0d2f70 Make the default priority for idle sources G_PRIORITY_DEFAULT_IDLE as
Thu Aug  7 14:15:44 2003  Owen Taylor  <otaylor@redhat.com>

        * glib/gmain.c (g_idle_source_new): Make the default priority
        for idle sources G_PRIORITY_DEFAULT_IDLE as anybody would
        expect and document that. (#114461, reported by Andy Wingo)
2003-08-07 18:19:23 +00:00
Matthias Clasen
a412fb1654 Remove some explicit Docbook markup which is no longer necessary
since gtk-doc does the right thing.
2003-07-25 21:32:47 +00:00
Manish Singh
ca1ff92c51 check if context->poll_chunk is set before trying to destroy it. For
Wed Jul  9 16:27:26 2003  Manish Singh  <yosh@gimp.org>

        * glib/gmain.c (g_main_context_unref_and_unlock): check if
        context->poll_chunk is set before trying to destroy it. For example,
        This can happen if no sources are added to a context before it is
        freed.
2003-07-09 23:31:20 +00:00
Owen Taylor
4a21238fef When dispatching a source that is !CAN_RECURSE, temporarily remove any
Thu Jun  5 23:40:31 2003  Owen Taylor  <otaylor@redhat.com>

        * glib/gmain.c: When dispatching a source that is
        !CAN_RECURSE, temporarily remove any file descriptors
        that that source has registered from the main loop, to keep
        recursive main loops from busy-waiting if input
        becomes available on one of those file descriptors.
        (#112222, Christian Krause)

        * glib/gmain.c (g_source_set_priority): Properly
        remove the source from the context's source list
        and reinsert it sorted, rather than simply setting
        source->next/prev to NULL! (#114274)
2003-06-06 03:54:03 +00:00
Tor Lillqvist
1cf610e216 glib/giochannel.h Remove bogus (Win32-only) declaration of
2003-06-05  Tor Lillqvist  <tml@iki.fi>

	* glib/giochannel.h
	* glib/gmain.h: Remove bogus (Win32-only) declaration of
	g_main_poll_win32_msg_add(). No such function exists.

	* glib/gmain.c (g_poll) [Win32]: Use g_win32_error_message() for
	better warning messages.
2003-06-05 22:18:27 +00:00
Owen Taylor
5b4af3060f When waiting for the main loop to be freed up, wait on either
Mon Apr  7 13:40:28 2003  Owen Taylor  <otaylor@redhat.com>

        * glib/gmain.c (g_main_loop_run): When waiting for
        the main loop to be freed up, wait on either
        !loop->is_running or got_ownership, not both.
        (Caused gtk_dialog_run() not to work in other
        threads, reported by Jean-Yves Lefort)
2003-04-07 17:50:53 +00:00
Matthias Clasen
ea9a7199a1 Fix FALSE/NULL confusion. (#107646, Morten Welinder)
2003-03-06  Matthias Clasen  <maclas@gmx.de>

	* glib/gmain.c (g_main_context_find_source_by_id):
	(g_main_context_find_source_by_funcs_user_data): Fix FALSE/NULL
	confusion.  (#107646, Morten Welinder)
2003-03-06 22:41:03 +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