[brasero/gnome-2-28] Add an additional reference to GDrive or GVolume when doing an operation on them in case the GDrive



commit 12cc4088ce0f773280d0618e1f0680191e292361
Author: Philippe Rouquier <bonfire-app wanadoo fr>
Date:   Sat Oct 17 20:31:23 2009 +0200

    Add an additional reference to GDrive or GVolume when doing an operation on them in case the GDrive or the GVolume object gets updated while waiting in the main loop

 libbrasero-media/brasero-gio-operation.c |   24 ++++++++++++++++++++++--
 1 files changed, 22 insertions(+), 2 deletions(-)
---
diff --git a/libbrasero-media/brasero-gio-operation.c b/libbrasero-media/brasero-gio-operation.c
index a5cf69e..58452f6 100644
--- a/libbrasero-media/brasero-gio-operation.c
+++ b/libbrasero-media/brasero-gio-operation.c
@@ -243,6 +243,8 @@ brasero_gio_operation_umount (GVolume *gvolume,
 						     G_CALLBACK (brasero_gio_operation_umounted_cb),
 						     op);
 
+		/* NOTE: we own a reference to mount
+		 * object so no need to ref it even more */
 		g_mount_unmount (mount,
 				 G_MOUNT_UNMOUNT_NONE,
 				 cancel,
@@ -325,8 +327,12 @@ brasero_gio_operation_mount (GVolume *gvolume,
 		BraseroGioOperation *op;
 
 		op = g_new0 (BraseroGioOperation, 1);
-		op->cancel = cancel;
+		op->cancel = cancel;
 
+		/* Ref gvolume as it could be unreffed 
+		 * while we are in the loop */
+		g_object_ref (gvolume);
+
 		g_volume_mount (gvolume,
 				G_MOUNT_MOUNT_NONE,
 				operation,				/* authentification */
@@ -334,6 +340,8 @@ brasero_gio_operation_mount (GVolume *gvolume,
 				brasero_gio_operation_mount_finish,
 				op);
 		result = brasero_gio_operation_wait_for_operation_end (op, error);
+
+		g_object_unref (gvolume);
 	}
 	else {
 		g_volume_mount (gvolume,
@@ -406,6 +414,10 @@ brasero_gio_operation_eject_volume (GVolume *gvolume,
 					      G_CALLBACK (brasero_gio_operation_removed_cb),
 					      op);
 
+		/* Ref gvolume as it could be unreffed 
+		 * while we are in the loop */
+		g_object_ref (gvolume);
+
 		g_volume_eject (gvolume,
 				G_MOUNT_UNMOUNT_NONE,
 				cancel,
@@ -416,6 +428,8 @@ brasero_gio_operation_eject_volume (GVolume *gvolume,
 		g_signal_handler_disconnect (gvolume, eject_sig);
 
 		brasero_gio_operation_destroy (op);
+
+		g_object_unref (gvolume);
 	}
 	else {
 		g_volume_eject (gvolume,
@@ -489,10 +503,16 @@ brasero_gio_operation_eject_drive (GDrive *gdrive,
 			       brasero_gio_operation_eject_finish,
 			       op);
 
+		/* Ref gdrive as it could be unreffed 
+		 * while we are in the loop */
+		g_object_ref (gdrive);
+
 		result = brasero_gio_operation_wait_for_operation_end (op, error);
 		brasero_gio_operation_destroy (op);
 		g_signal_handler_disconnect (gdrive, eject_sig);
-		g_signal_handler_disconnect (gdrive, disconnect_sig);
+		g_signal_handler_disconnect (gdrive, disconnect_sig);
+
+		g_object_unref (gdrive);
 	}
 	else {
 		g_drive_eject (gdrive,



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]