rpms/brasero/devel nautilus-segfault.patch, NONE, 1.1 brasero.spec, 1.56, 1.57

Matthias Clasen mclasen at fedoraproject.org
Mon Aug 3 22:49:31 UTC 2009


Author: mclasen

Update of /cvs/pkgs/rpms/brasero/devel
In directory cvs1.fedora.phx.redhat.com:/tmp/cvs-serv31758

Modified Files:
	brasero.spec 
Added Files:
	nautilus-segfault.patch 
Log Message:
Fix a nautilus segfault when burning


nautilus-segfault.patch:
 libbrasero-burn/brasero-track-data-cfg.c |  105 ++++++++++++++++++++++++-------
 libbrasero-utils/brasero-io.c            |    9 ++
 2 files changed, 90 insertions(+), 24 deletions(-)

--- NEW FILE nautilus-segfault.patch ---
diff --git a/libbrasero-burn/brasero-track-data-cfg.c b/libbrasero-burn/brasero-track-data-cfg.c
index 69d3505..3e91a26 100644
--- a/libbrasero-burn/brasero-track-data-cfg.c
+++ b/libbrasero-burn/brasero-track-data-cfg.c
@@ -1754,29 +1754,6 @@ brasero_track_data_clean_autorun (BraseroTrackDataCfg *track)
 }
 
 static void
-brasero_track_data_cfg_finalize (GObject *object)
-{
-	BraseroTrackDataCfgPrivate *priv;
-
-	priv = BRASERO_TRACK_DATA_CFG_PRIVATE (object);
-
-	brasero_track_data_clean_autorun (BRASERO_TRACK_DATA_CFG (object));
-	brasero_track_data_cfg_clean_cache (BRASERO_TRACK_DATA_CFG (object));
-
-	if (priv->shown) {
-		g_slist_free (priv->shown);
-		priv->shown = NULL;
-	}
-
-	if (priv->tree) {
-		g_object_unref (priv->tree);
-		priv->tree = NULL;
-	}
-
-	G_OBJECT_CLASS (brasero_track_data_cfg_parent_class)->finalize (object);
-}
-
-static void
 brasero_track_data_cfg_iface_init (gpointer g_iface, gpointer data)
 {
 	GtkTreeModelIface *iface = g_iface;
@@ -3158,6 +3135,88 @@ brasero_track_data_cfg_init (BraseroTrackDataCfg *object)
 }
 
 static void
+brasero_track_data_cfg_finalize (GObject *object)
+{
+	BraseroTrackDataCfgPrivate *priv;
+
+	priv = BRASERO_TRACK_DATA_CFG_PRIVATE (object);
+
+	brasero_track_data_clean_autorun (BRASERO_TRACK_DATA_CFG (object));
+	brasero_track_data_cfg_clean_cache (BRASERO_TRACK_DATA_CFG (object));
+
+	if (priv->shown) {
+		g_slist_free (priv->shown);
+		priv->shown = NULL;
+	}
+
+	if (priv->tree) {
+		/* This object could outlive us just for some time
+		 * so we better remove all signals.
+		 * When an image URI is detected it can happen
+		 * that we'll be destroyed. */
+		g_signal_handlers_disconnect_by_func (priv->tree,
+		                                      brasero_track_data_cfg_node_added,
+		                                      object);
+		g_signal_handlers_disconnect_by_func (priv->tree,
+		                                      brasero_track_data_cfg_node_changed,
+		                                      object);
+		g_signal_handlers_disconnect_by_func (priv->tree,
+		                                      brasero_track_data_cfg_node_removed,
+		                                      object);
+		g_signal_handlers_disconnect_by_func (priv->tree,
+		                                      brasero_track_data_cfg_node_reordered,
+		                                      object);
+		g_signal_handlers_disconnect_by_func (priv->tree,
+		                                      brasero_track_data_cfg_size_changed_cb,
+		                                      object);
+		g_signal_handlers_disconnect_by_func (priv->tree,
+		                                      brasero_track_data_cfg_session_available_cb,
+		                                      object);
+		g_signal_handlers_disconnect_by_func (priv->tree,
+		                                      brasero_track_data_cfg_session_loaded_cb,
+		                                      object);
+		g_signal_handlers_disconnect_by_func (priv->tree,
+		                                      brasero_track_data_cfg_project_loaded,
+		                                      object);
+		g_signal_handlers_disconnect_by_func (priv->tree,
+		                                      brasero_track_data_cfg_activity_changed,
+		                                      object);
+		g_signal_handlers_disconnect_by_func (priv->tree,
+		                                      brasero_track_data_cfg_deep_directory,
+		                                      object);
+		g_signal_handlers_disconnect_by_func (priv->tree,
+		                                      brasero_track_data_cfg_2G_file,
+		                                      object);
+		g_signal_handlers_disconnect_by_func (priv->tree,
+		                                      brasero_track_data_cfg_unreadable_uri_cb,
+		                                      object);
+		g_signal_handlers_disconnect_by_func (priv->tree,
+		                                      brasero_track_data_cfg_unknown_uri_cb,
+		                                      object);
+		g_signal_handlers_disconnect_by_func (priv->tree,
+		                                      brasero_track_data_cfg_recursive_uri_cb,
+		                                      object);
+		g_signal_handlers_disconnect_by_func (priv->tree,
+		                                      brasero_track_data_cfg_image_uri_cb,
+		                                      object);
+		g_signal_handlers_disconnect_by_func (priv->tree,
+		                                      brasero_track_data_cfg_virtual_sibling_cb,
+		                                      object);
+		g_signal_handlers_disconnect_by_func (priv->tree,
+		                                      brasero_track_data_cfg_name_collision_cb,
+		                                      object);
+		g_signal_handlers_disconnect_by_func (priv->tree,
+		                                      brasero_track_data_cfg_joliet_rename_cb,
+		                                      object);
+
+		g_object_unref (priv->tree);
+		priv->tree = NULL;
+	}
+
+	G_OBJECT_CLASS (brasero_track_data_cfg_parent_class)->finalize (object);
+}
+
+static void
 brasero_track_data_cfg_class_init (BraseroTrackDataCfgClass *klass)
 {
 	GObjectClass *object_class = G_OBJECT_CLASS (klass);
diff --git a/libbrasero-utils/brasero-io.c b/libbrasero-utils/brasero-io.c
index cfeb4d5..bd12861 100644
--- a/libbrasero-utils/brasero-io.c
+++ b/libbrasero-utils/brasero-io.c
@@ -364,6 +364,11 @@ brasero_io_return_result_idle (gpointer callback_data)
 		g_mutex_unlock (priv->lock);
 
 		data = result->callback_data;
+
+		/* This is to make sure the object lives
+		 * as long as we need it. */
+		g_object_ref (base->object);
+
 		if (result->uri || result->info || result->error)
 			result->base->callback (base->object,
 						result->error,
@@ -371,12 +376,14 @@ brasero_io_return_result_idle (gpointer callback_data)
 						result->info,
 						data? data->callback_data:NULL);
 
-		/* Else this is just to call destroy () for callback data */
+		/* call destroy () for callback data */
 		brasero_io_unref_result_callback_data (data,
 						       base->object,
 						       base->destroy,
 						       FALSE);
 
+		g_object_unref (base->object);
+
 		brasero_io_job_result_free (result);
 
 		g_mutex_lock (priv->lock);



Index: brasero.spec
===================================================================
RCS file: /cvs/pkgs/rpms/brasero/devel/brasero.spec,v
retrieving revision 1.56
retrieving revision 1.57
diff -u -p -r1.56 -r1.57
--- brasero.spec	28 Jul 2009 04:21:12 -0000	1.56
+++ brasero.spec	3 Aug 2009 22:49:31 -0000	1.57
@@ -1,7 +1,6 @@
-
 Name:      brasero
 Version:   2.27.5
-Release:   1%{?dist}
+Release:   2%{?dist}
 Summary:   Gnome CD/DVD burning application
 Group:     Applications/Multimedia
 License:   GPLv2+
@@ -9,6 +8,8 @@ URL:       http://www.gnome.org/projects
 Source0:   http://ftp.gnome.org/pub/GNOME/sources/brasero/2.27/%{name}-%{version}.tar.bz2
 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 
+Patch0:    nautilus-segfault.patch
+
 BuildRequires:  glib2-devel >= 2.15.6
 BuildRequires:  gettext intltool gtk-doc
 BuildRequires:  desktop-file-utils
@@ -86,6 +87,7 @@ developing brasero applications.
 
 %prep
 %setup -q
+%patch0 -p1 -b .nautilus-segfault
 
 
 %build
@@ -203,6 +205,9 @@ fi
 
 
 %changelog
+* Mon Aug  3 2009 Matthias Clasen <mclasen at redhat.com> - 2.27.5-2
+- Fix a nautilus segfault when burning  
+
 * Tue Jul 28 2009 Matthias Clasen <mclasen at redhat.com> - 2.27.5-1
 - Update to 2.27.5
 




More information about the scm-commits mailing list