Merge lp:~ted/libdbusmenu/about-to-show-null-cb-protect into lp:libdbusmenu/0.6

Proposed by Ted Gould
Status: Merged
Approved by: Charles Kerr
Approved revision: 403
Merged at revision: 402
Proposed branch: lp:~ted/libdbusmenu/about-to-show-null-cb-protect
Merge into: lp:libdbusmenu/0.6
Diff against target: 57 lines (+13/-2)
1 file modified
libdbusmenu-glib/client.c (+13/-2)
To merge this branch: bzr merge lp:~ted/libdbusmenu/about-to-show-null-cb-protect
Reviewer Review Type Date Requested Status
Charles Kerr (community) Approve
Review via email: mp+100907@code.launchpad.net

Description of the change

Fixing the about-to-show callback to better handle having a NULL callback, and thus NULL data. Putting some protections in as well so we'll get better errors from it if we make this mistake again.

To post a comment you must log in.
Revision history for this message
Charles Kerr (charlesk) wrote :

Looks like this fixes the crash I was seeing yesterday.

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'libdbusmenu-glib/client.c'
--- libdbusmenu-glib/client.c 2012-04-04 04:23:00 +0000
+++ libdbusmenu-glib/client.c 2012-04-05 04:10:26 +0000
@@ -1834,6 +1834,8 @@
1834static void1834static void
1835about_to_show_finish (about_to_show_t * data, gboolean need_update)1835about_to_show_finish (about_to_show_t * data, gboolean need_update)
1836{1836{
1837 g_return_if_fail(data != NULL);
1838
1837 /* If we need to update, do that first. */1839 /* If we need to update, do that first. */
1838 if (need_update) {1840 if (need_update) {
1839 update_layout(data->client);1841 update_layout(data->client);
@@ -1938,6 +1940,8 @@
1938 GQueue * showers = priv->about_to_show_to_go;1940 GQueue * showers = priv->about_to_show_to_go;
1939 priv->about_to_show_to_go = NULL;1941 priv->about_to_show_to_go = NULL;
19401942
1943 g_return_val_if_fail(showers != NULL, FALSE);
1944
1941 /* Figure out if we've got any callbacks */1945 /* Figure out if we've got any callbacks */
1942 gboolean got_callbacks = FALSE;1946 gboolean got_callbacks = FALSE;
1943 g_queue_foreach(showers, about_to_show_idle_callbacks, &got_callbacks);1947 g_queue_foreach(showers, about_to_show_idle_callbacks, &got_callbacks);
@@ -1995,7 +1999,10 @@
1995 g_variant_unref(params);1999 g_variant_unref(params);
1996 }2000 }
19972001
1998 about_to_show_finish(data, need_update);2002 if (data != NULL) {
2003 about_to_show_finish(data, need_update);
2004 }
2005
1999 return;2006 return;
2000}2007}
20012008
@@ -2028,11 +2035,15 @@
2028 priv->about_to_show_idle = g_idle_add(about_to_show_idle, client);2035 priv->about_to_show_idle = g_idle_add(about_to_show_idle, client);
2029 }2036 }
2030 } else {2037 } else {
2038 GAsyncReadyCallback dbuscb = NULL;
2039
2031 /* If there's no callback we don't need this data, let's2040 /* If there's no callback we don't need this data, let's
2032 clean it up in a consistent way */2041 clean it up in a consistent way */
2033 if (cb == NULL) {2042 if (cb == NULL) {
2034 about_to_show_finish(data, FALSE);2043 about_to_show_finish(data, FALSE);
2035 data = NULL;2044 data = NULL;
2045 } else {
2046 dbuscb = about_to_show_cb;
2036 }2047 }
20372048
2038 g_dbus_proxy_call(priv->menuproxy,2049 g_dbus_proxy_call(priv->menuproxy,
@@ -2041,7 +2052,7 @@
2041 G_DBUS_CALL_FLAGS_NONE,2052 G_DBUS_CALL_FLAGS_NONE,
2042 -1, /* timeout */2053 -1, /* timeout */
2043 NULL, /* cancellable */2054 NULL, /* cancellable */
2044 about_to_show_cb,2055 dbuscb,
2045 data);2056 data);
2046 }2057 }
20472058

Subscribers

People subscribed via source and target branches

to all changes: