summaryrefslogtreecommitdiff
path: root/engine/dconf-engine.c
diff options
context:
space:
mode:
Diffstat (limited to 'engine/dconf-engine.c')
-rw-r--r--engine/dconf-engine.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/engine/dconf-engine.c b/engine/dconf-engine.c
index 864e8e2..57bce96 100644
--- a/engine/dconf-engine.c
+++ b/engine/dconf-engine.c
@@ -814,15 +814,19 @@ dconf_engine_watch_fast (DConfEngine *engine,
G_VARIANT_TYPE_UNIT, sizeof (OutstandingWatch));
ow->state = dconf_engine_get_state (engine);
+ /* We start getting async calls returned as soon as we start dispatching them,
+ * so we must not touch the 'ow' struct after we send the first one.
+ */
for (i = 0; i < engine->n_sources; i++)
if (engine->sources[i]->bus_type)
- {
- dconf_engine_dbus_call_async_func (engine->sources[i]->bus_type, "org.freedesktop.DBus",
- "/org/freedesktop/DBus", "org.freedesktop.DBus", "AddMatch",
- dconf_engine_make_match_rule (engine->sources[i], path),
- &ow->handle, NULL);
- ow->pending++;
- }
+ ow->pending++;
+
+ for (i = 0; i < engine->n_sources; i++)
+ if (engine->sources[i]->bus_type)
+ dconf_engine_dbus_call_async_func (engine->sources[i]->bus_type, "org.freedesktop.DBus",
+ "/org/freedesktop/DBus", "org.freedesktop.DBus", "AddMatch",
+ dconf_engine_make_match_rule (engine->sources[i], path),
+ &ow->handle, NULL);
}
void