[Xfce4-commits] r25398 - in squeeze/trunk: libsqueeze src

Stephan Arts stephan at xfce.org
Fri Apr 6 14:41:46 CEST 2007


Author: stephan
Date: 2007-04-06 12:41:46 +0000 (Fri, 06 Apr 2007)
New Revision: 25398

Modified:
   squeeze/trunk/libsqueeze/archive-command.c
   squeeze/trunk/libsqueeze/archive.c
   squeeze/trunk/libsqueeze/libsqueeze.c
   squeeze/trunk/src/notebook.c
Log:
fix segfault when archive is closed while a command is running;


Modified: squeeze/trunk/libsqueeze/archive-command.c
===================================================================
--- squeeze/trunk/libsqueeze/archive-command.c	2007-04-06 12:18:39 UTC (rev 25397)
+++ squeeze/trunk/libsqueeze/archive-command.c	2007-04-06 12:41:46 UTC (rev 25398)
@@ -116,6 +116,11 @@
 {
 	LSQArchiveCommand *command = LSQ_ARCHIVE_COMMAND(object);
 	g_signal_emit(object, lsq_archive_command_signals[LSQ_ARCHIVE_COMMAND_SIGNAL_TERMINATED], 0, command->error, NULL);
+	if(command->archive)
+	{
+		g_object_unref(command->archive);
+		command->archive = NULL;
+	}
 	parent_class->dispose(object);
 }
 
@@ -148,7 +153,12 @@
 	g_return_val_if_fail(LSQ_IS_ARCHIVE(command->archive), FALSE);
 #endif /* DEBUG */
 
-	return command->execute(command);
+	g_object_ref(command->archive);
+
+	gboolean ret_val = command->execute(command);
+	if(ret_val)
+		g_object_ref(command->archive);
+	return ret_val;
 }
 
 /**

Modified: squeeze/trunk/libsqueeze/archive.c
===================================================================
--- squeeze/trunk/libsqueeze/archive.c	2007-04-06 12:18:39 UTC (rev 25397)
+++ squeeze/trunk/libsqueeze/archive.c	2007-04-06 12:41:46 UTC (rev 25398)
@@ -499,3 +499,12 @@
 {
 	g_signal_emit(G_OBJECT(archive), lsq_archive_signals[LSQ_ARCHIVE_SIGNAL_STATE_CHANGED], 0, NULL);
 }
+
+void
+lsq_close_archive(LSQArchive *archive)
+{
+	if(archive->command)
+		g_signal_handlers_disconnect_by_func(archive->command, cb_archive_archive_command_terminated, archive);
+	lsq_archive_stop(archive);
+	g_object_unref(archive);
+}

Modified: squeeze/trunk/libsqueeze/libsqueeze.c
===================================================================
--- squeeze/trunk/libsqueeze/libsqueeze.c	2007-04-06 12:18:39 UTC (rev 25397)
+++ squeeze/trunk/libsqueeze/libsqueeze.c	2007-04-06 12:41:46 UTC (rev 25398)
@@ -130,11 +130,6 @@
 	return 0;
 }
 
-void
-lsq_close_archive(LSQArchive *archive)
-{
-	g_object_unref(archive);
-}
 
 GSList *
 lsq_get_supported_mime_types(LSQSupportTypes types)

Modified: squeeze/trunk/src/notebook.c
===================================================================
--- squeeze/trunk/src/notebook.c	2007-04-06 12:18:39 UTC (rev 25397)
+++ squeeze/trunk/src/notebook.c	2007-04-06 12:41:46 UTC (rev 25398)
@@ -579,7 +579,9 @@
 	LSQArchive *archive = sq_archive_store_get_archive(SQ_ARCHIVE_STORE(archive_store));
 
 	if(archive)
+	{
 		g_signal_handlers_disconnect_by_func(archive, cb_notebook_archive_refreshed, treeview);
+	}
 	if(SQ_NOTEBOOK(notebook)->navigation_bar)
 		sq_navigation_bar_set_store(((SQNotebook *)notebook)->navigation_bar, NULL);
 	g_object_unref(archive_store);



More information about the Xfce4-commits mailing list