← Back to team overview

ayatana-commits team mailing list archive

[Merge] lp:~mterry/appmenu-gtk/fix-timeout-crash into lp:appmenu-gtk

 

Michael Terry has proposed merging lp:~mterry/appmenu-gtk/fix-timeout-crash into lp:appmenu-gtk.

Requested reviews:
  Canonical Desktop Experience Team (canonical-dx-team)
Related bugs:
  #726388 crashes with SIGSEGV in do_rebuild() when running under valgrind
  https://bugs.launchpad.net/bugs/726388

For more details, see:
https://code.launchpad.net/~mterry/appmenu-gtk/fix-timeout-crash/+merge/52239

This fixes a crash under valgrind apparently due to a toplevel dying before we can get to it.  I couldn't reproduce, but seb128 could and he confirmed this fixes it.
-- 
https://code.launchpad.net/~mterry/appmenu-gtk/fix-timeout-crash/+merge/52239
Your team ayatana-commits is subscribed to branch lp:appmenu-gtk.
=== modified file 'src/bridge.c'
--- src/bridge.c	2011-03-03 17:19:12 +0000
+++ src/bridge.c	2011-03-04 18:33:23 +0000
@@ -463,14 +463,15 @@
 static gboolean
 do_rebuild (RebuildData *data)
 {
-  if (gtk_widget_is_toplevel (data->widget))
+  if (data->widget != NULL && gtk_widget_is_toplevel (data->widget))
     {
       rebuild_window_items (data->bridge,
                             data->widget);
 
-      g_hash_table_remove (rebuild_ids, data->widget);
+      g_object_remove_weak_pointer (G_OBJECT (data->widget), (gpointer*)&data->widget);
     }
 
+  g_hash_table_remove (rebuild_ids, data->widget);
   g_free (data);
 
   return FALSE;
@@ -502,6 +503,8 @@
                       (GSourceFunc)do_rebuild,
                       data);
 
+  g_object_add_weak_pointer (G_OBJECT (data->widget), (gpointer*)&data->widget);
+
   if (rebuild_ids == NULL)
     {
       rebuild_ids = g_hash_table_new (g_direct_hash, g_direct_equal);


Follow ups