gdbus-codegen: Ensure that generated skeletons are MT-safe
authorDavid Zeuthen <davidz@redhat.com>
Sun, 15 May 2011 15:45:37 +0000 (11:45 -0400)
committerDavid Zeuthen <davidz@redhat.com>
Sun, 15 May 2011 16:38:24 +0000 (12:38 -0400)
commit11e01802abcf006caa8e3c2ecf6cfd195db98fd9
tree7a8afe4ccdbb9a0a3f4b65c2774266195627c29e
parent2122191595fc7059ff4838b967ea0beb19b18d47
gdbus-codegen: Ensure that generated skeletons are MT-safe

For example, if setting a property on a skeleton from another thread
than where it was constructed, the idle handler responsible for
emitting the PropertiesChanged() signal could run immediately and
clear skeleton->priv->changed_properties_idle_source causing
g_source_unref() to be called with a NULL pointer. This race was
easily be fixed by adding a lock to the skeleton object.

In addition to fixing this race, also move the code for setting up the
idle handler to a class handler for the GObject::notify signal. This
change allows use of g_object_freeze_notify() and g_object_thaw_notify()
to perform atomic property changes from another thread than the one
that the skeleton was created in.

Signed-off-by: David Zeuthen <davidz@redhat.com>
docs/reference/gio/gdbus-codegen.xml
gio/gdbus-codegen/codegen.py