diff options
author | Ted Gould <ted@gould.cx> | 2012-02-15 11:14:47 -0600 |
---|---|---|
committer | Ted Gould <ted@gould.cx> | 2012-02-15 11:14:47 -0600 |
commit | b3341dfd9487fc4617a8af539e99123aa4624c42 (patch) | |
tree | 8dcee627c31b03b8f72690b1d5def5555b4ff13b | |
parent | 595dc9307fb725c8cdfd7507bafe76b8c257df9b (diff) | |
parent | c3467a14ee0ff76b51d5771614153cc6810352ac (diff) | |
download | libdbusmenu-b3341dfd9487fc4617a8af539e99123aa4624c42.tar.gz libdbusmenu-b3341dfd9487fc4617a8af539e99123aa4624c42.tar.bz2 libdbusmenu-b3341dfd9487fc4617a8af539e99123aa4624c42.zip |
Fix an error on a failure to send properties
-rw-r--r-- | libdbusmenu-glib/server.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/libdbusmenu-glib/server.c b/libdbusmenu-glib/server.c index 4890d37..c992085 100644 --- a/libdbusmenu-glib/server.c +++ b/libdbusmenu-glib/server.c @@ -990,6 +990,7 @@ menuitem_property_idle (gpointer user_data) /* these are going to be standard references in all code paths and must be unrefed */ GVariant * megadata[2]; gboolean gotsomething = FALSE; + gboolean error_nosend = FALSE; if (item_init) { megadata[0] = g_variant_builder_end(&itembuilder); @@ -1002,6 +1003,10 @@ menuitem_property_idle (gpointer user_data) if (error != NULL) { g_warning("Unable to parse '[ ]' as a 'a(ia{sv})': %s", error->message); g_error_free(error); + megadata[0] = NULL; + error_nosend = TRUE; + } else { + g_variant_ref_sink(megadata[0]); } } @@ -1016,10 +1021,14 @@ menuitem_property_idle (gpointer user_data) if (error != NULL) { g_warning("Unable to parse '[ ]' as a 'a(ias)': %s", error->message); g_error_free(error); + megadata[1] = NULL; + error_nosend = TRUE; + } else { + g_variant_ref_sink(megadata[1]); } } - if (gotsomething && priv->dbusobject != NULL && priv->bus != NULL) { + if (gotsomething && !error_nosend && priv->dbusobject != NULL && priv->bus != NULL) { g_dbus_connection_emit_signal(priv->bus, NULL, priv->dbusobject, @@ -1029,8 +1038,13 @@ menuitem_property_idle (gpointer user_data) NULL); } - g_variant_unref(megadata[0]); - g_variant_unref(megadata[1]); + if (megadata[0] != NULL) { + g_variant_unref(megadata[0]); + } + + if (megadata[1] != NULL) { + g_variant_unref(megadata[1]); + } /* Clean everything up */ prop_array_teardown(priv->prop_array); |