After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 697269 - gitg-0.2.6: Segfault with GTK+-3.8.0 / glib-2.36.0
gitg-0.2.6: Segfault with GTK+-3.8.0 / glib-2.36.0
Status: RESOLVED FIXED
Product: gitg
Classification: Applications
Component: gitg
0.2.x
Other Linux
: Normal normal
: ---
Assigned To: gitg-maint
gitg-maint
Depends on:
Blocks:
 
 
Reported: 2013-04-04 13:49 UTC by Richard Grenville
Modified: 2013-04-05 11:25 UTC
See Also:
GNOME target: ---
GNOME version: ---


Attachments
backtrace.txt (7.79 KB, text/plain)
2013-04-04 13:49 UTC, Richard Grenville
Details

Description Richard Grenville 2013-04-04 13:49:06 UTC
Created attachment 240608 [details]
backtrace.txt

I updated to glib-2.36.0 & GTK+ 3.8.0 today and gitg started segfaulting immediately after execution. Backtrace is attached below.

I found it segfaults when accessing window->priv->edit_group in gitg_window_set_focus(). gdb shows the data inside window->priv->edit_group is invalid. I traced the changes to the fields in window->priv->edit_group, and discovered:

---
	GtkBuilder *b = gitg_utils_new_builder ("gitg-ui.xml");
// ...

// gitg-window.c:933: Fetch action group
	window->priv->edit_group = GTK_ACTION_GROUP(gtk_builder_get_object (b, "action_group_menu_edit"));
	window->priv->repository_group = GTK_ACTION_GROUP(gtk_builder_get_object (b, "action_group_menu_repository"));

	gtk_builder_connect_signals (b, window);
// gitg-window.c:937: At this step the object window->priv->edit_group points to is freed together with the object "b"
// Seemingly window->priv->repository_group has the same issue
	g_object_unref (b);
---

So I tried to add a g_object_ref(window->priv->edit_group) call after it fetches window->priv->edit_group, and seemingly it worked, at least I no longer get segfaults.

--- gitg/gitg-window.orig.c	2013-04-04 21:27:57.799976736 +0800
+++ gitg/gitg-window.c	2013-04-04 21:29:24.679976110 +0800
@@ -234,6 +234,16 @@
 		self->priv->hidden_settings = NULL;
 	}
 
+	if (self->priv->edit_group) {
+		g_object_unref(self->priv->edit_group);
+		self->priv->edit_group = NULL;
+	}
+
+	if (self->priv->repository_group) {
+		g_object_unref(self->priv->repository_group);
+		self->priv->repository_group = NULL;
+	}
+
 	G_OBJECT_CLASS (gitg_window_parent_class)->dispose (object);
 }
 
@@ -931,7 +941,9 @@
 	gtk_window_add_accel_group (GTK_WINDOW (window), gtk_ui_manager_get_accel_group (uiman));
 
 	window->priv->edit_group = GTK_ACTION_GROUP(gtk_builder_get_object (b, "action_group_menu_edit"));
+	g_object_ref(window->priv->edit_group);
 	window->priv->repository_group = GTK_ACTION_GROUP(gtk_builder_get_object (b, "action_group_menu_repository"));
+	g_object_ref(window->priv->repository_group);
 
 	gtk_builder_connect_signals (b, window);
 	g_object_unref (b);
Comment 1 Ignacio Casal Quinteiro (nacho) 2013-04-05 11:25:02 UTC
This problem has been fixed in our software repository. The fix will go into the next software release. Thank you for your bug report.