[Patch] nautilus crash #135727



Hi All,

Synopsis
--------
Crash when switching to catalog view repeatedly.

This bug is specific to 2.6 branch and not applicable to current sources.

Analysis and Solution
---------------------
Basically it looks to be a timing issue for the out processess which are
embeded onto nautilus. For ex: Image Collection View and Catalog View.

This bug is only visible switching from `Image collection view` to
`Catalog view`.

Looks like Bonobo `ui_events` are being addressed after the existing content_view widget is being destroyed. Instead, these events are to be processed at very initial stage or in other words, before destroying the existing view i.e window->content_view. I'm not very sure why this is happens, but the attached patch looks to be a way to avoid these type of situations.

This patch basically avoids any usage of `window->content_view` if its
not having the appropriate value or already destroyed (as in current case).

Bugzilla bug: http://bugzilla.gnome.org/show_bug.cgi?id=135727.

Kindly have a look at the attached patch.

Thanks & Regards
vijay.

--- nautilus/ChangeLog	2004-06-26 02:02:04.000000000 +0530
+++ nautilus-new/ChangeLog	2005-03-22 10:35:34.854254416 +0530
@@ -1,3 +1,11 @@
+2005-03-22  Vijaykumar Patwari <vijaykumar patwari wipro com>
+
+	* src/nautilus-window.c: (real_set_content_view_widget):
+	Set content_view to NULL and then free the location.
+	* src/nautilus-window-manage-views.c: (nautilus_window_set_content_view):
+	Return if content_view is NULL.
+	Fixes bug #135727.
+	
 2004-06-25  Sebastien Bacher  <seb128 debian org>
 
         * libnautilus-private/nautilus-icon-container.c:
--- nautilus/src/nautilus-window.c	2004-05-26 10:44:23.000000000 +0530
+++ nautilus-new/src/nautilus-window.c	2005-03-22 10:29:38.465433752 +0530
@@ -1239,8 +1239,10 @@ real_set_content_view_widget (NautilusWi
 	}
 	
 	if (window->content_view != NULL) {
-		gtk_object_destroy (GTK_OBJECT (window->content_view));
+		NautilusViewFrame *temp = window->content_view;
 		window->content_view = NULL;
+		gtk_object_destroy (GTK_OBJECT (temp));
+		temp = NULL;
 	}
 
 	if (new_view != NULL) {
--- nautilus/src/nautilus-window-manage-views.c	2004-06-02 00:58:26.000000000 +0530
+++ nautilus-new/src/nautilus-window-manage-views.c	2005-03-22 10:29:24.041626504 +0530
@@ -1598,6 +1598,7 @@ nautilus_window_set_content_view (Nautil
 
 	g_return_if_fail (NAUTILUS_IS_WINDOW (window));
         g_return_if_fail (window->details->location != NULL);
+	g_return_if_fail (window->content_view != NULL);
 	g_return_if_fail (id != NULL);
 
         if (nautilus_window_content_view_matches_iid (window, id->iid)) {


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