Simon McVittie a7ea949294 GDBusConnection: check for initialization where needed for thread-safety
Also document which fields require such a check in order to have correct
threading semantics.

This usage doesn't matches the GInitable documentation, which suggests
use of a GError - but using an uninitialized GDBusConnection is
programming error, and not usefully recoverable. (The GInitable
documentation may have been a mistake - GNOME#662208.) Also, not all of
the places where we need it can raise a GError.

The check serves a dual purpose: it turns a non-deterministic crash into
a deterministic critical warning, and is also a memory barrier for
thread-safety. All of these functions dereference or return fields that
are meant to be protected by FLAG_INITIALIZED, so they could crash or
return an undefined value to their caller without this, if called from a
thread that isn't the one that called initable_init() (although I can't
think of any way to do that without encountering a memory barrier,
undefined behaviour, or a race condition that leads to undefined
behaviour if the non-initializing thread wins the race).

One exception is that initable_init() itself makes a synchronous call.
We deal with that by passing new internal flags up the call stack, to
reassure g_dbus_connection_send_message_unlocked() that it can go ahead.

Bug: https://bugzilla.gnome.org/show_bug.cgi?id=661689
Bug: https://bugzilla.gnome.org/show_bug.cgi?id=661992
Signed-off-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
Reviewed-by: David Zeuthen <davidz@redhat.com>
2011-10-21 16:02:27 +01:00
..
2011-10-18 17:12:33 +01:00
2010-08-13 17:23:44 -04:00
2010-09-02 22:36:47 +03:00
2011-09-04 17:50:41 -04:00
2011-06-12 16:17:30 -04:00
2011-06-04 10:45:54 -04:00
2009-03-31 19:39:16 -04:00
2011-08-29 14:49:32 -04:00
2011-10-16 21:41:15 -04:00
2011-10-18 17:12:33 +01:00
2011-08-29 14:49:32 -04:00
2011-08-29 14:49:32 -04:00
2010-07-12 18:30:14 -04:00
2011-10-18 17:12:33 +01:00
2011-06-04 19:05:51 -04:00
2010-07-05 00:56:12 -04:00
2011-08-29 14:49:32 -04:00
2010-03-26 09:30:25 -04:00
2010-07-12 18:30:14 -04:00
2010-07-12 18:30:14 -04:00
2011-08-29 14:49:32 -04:00
2010-07-12 18:30:14 -04:00
2011-06-14 21:06:17 -04:00
2011-10-18 17:12:33 +01:00
2011-10-18 17:12:33 +01:00
2010-07-07 19:53:22 -04:00
2011-10-15 18:02:32 -04:00
2011-08-29 14:49:32 -04:00
2011-08-29 14:49:32 -04:00
2011-10-15 18:02:32 -04:00
2011-08-29 14:49:32 -04:00
2011-06-04 18:48:19 -04:00
2011-08-29 14:49:32 -04:00
2011-08-29 14:49:32 -04:00
2010-01-12 16:34:18 +01:00
2011-06-07 08:55:31 +08:00
2011-10-16 21:41:15 -04:00
2011-08-29 14:49:32 -04:00
2011-10-16 21:41:15 -04:00
2011-08-29 14:49:32 -04:00
2011-09-04 17:50:41 -04:00
2010-07-10 18:04:22 -04:00
2010-07-07 19:53:22 -04:00
2011-02-08 10:05:00 -05:00
2011-10-16 21:41:15 -04:00
2011-10-16 21:41:15 -04:00
2011-02-08 10:05:00 -05:00
2010-11-28 23:55:43 -05:00
2010-06-04 19:03:38 +02:00
2011-10-18 17:12:33 +01:00
2010-11-28 23:55:43 -05:00
2011-06-04 18:48:19 -04:00
2010-08-19 16:32:37 -04:00
2011-08-29 14:49:32 -04:00
2011-08-29 14:49:32 -04:00
2011-01-09 21:45:20 +01:00
2011-08-29 14:49:32 -04:00
2010-04-16 23:23:40 -04:00
2011-10-18 17:12:33 +01:00
2011-10-16 21:41:15 -04:00
2011-10-16 21:41:15 -04:00
2011-08-29 14:49:32 -04:00
2011-10-18 17:12:33 +01:00
2011-10-16 21:41:15 -04:00
2011-10-16 21:41:15 -04:00
2011-10-16 21:41:15 -04:00
2011-08-04 08:54:55 +02:00
2011-10-16 21:41:15 -04:00
2011-08-26 11:07:32 -04:00
2011-10-02 22:33:10 -04:00
2011-06-14 18:51:57 -04:00
2011-05-05 14:09:11 -04:00
2011-10-03 14:06:47 -04:00
2011-10-03 14:06:47 -04:00
2009-07-05 22:35:55 -04:00
2010-07-12 18:30:14 -04:00
2011-08-29 14:49:32 -04:00
2010-07-07 19:53:22 -04:00
2011-08-29 14:49:32 -04:00