File nautilus-208834-handle-metafile-corba-errors.diff of Package nautilus
Patch from http://bugzilla.gnome.org/show_bug.cgi?id=46664
Handle CORBA errors in the metafile code. This should deal with
crashes in gnome-vfs-daemon better.
See https://bugzilla.novell.com/show_bug.cgi?id=208834
--- nautilus/libnautilus-private/nautilus-directory-metafile.c.orig 2006-10-03 10:46:37.000000000 -0500
+++ nautilus/libnautilus-private/nautilus-directory-metafile.c 2006-10-03 10:47:18.000000000 -0500
@@ -179,8 +179,12 @@ nautilus_directory_is_metadata_read (Nau
}
result = Nautilus_Metafile_is_read (metafile, &ev);
+ if (ev._major != CORBA_NO_EXCEPTION) {
+ result = TRUE;
+ g_debug ("CORBA exception when determining whether metafile is read: %s",
+ CORBA_exception_id (&ev));
+ }
- /* FIXME bugzilla.gnome.org 46664: examine ev for errors */
CORBA_exception_free (&ev);
return result;
@@ -216,7 +220,7 @@ nautilus_directory_get_file_metadata (Na
corba_value = Nautilus_Metafile_get (metafile, file_name, key, non_null_default, &ev);
if (ev._major != CORBA_NO_EXCEPTION) {
- g_warning ("Failed to get file metadata.");
+ g_debug ("CORBA exception when getting file metadata: %s", CORBA_exception_id (&ev));
CORBA_exception_free (&ev);
return g_strdup (default_metadata);
}
@@ -263,8 +267,12 @@ nautilus_directory_get_file_metadata_lis
CORBA_exception_init (&ev);
corba_value = Nautilus_Metafile_get_list (metafile, file_name, list_key, list_subkey, &ev);
+ if (ev._major != CORBA_NO_EXCEPTION) {
+ g_debug ("Failed to get metafile list: %s\n", CORBA_exception_id (&ev));
+ CORBA_exception_free (&ev);
+ return NULL;
+ }
- /* FIXME bugzilla.gnome.org 46664: examine ev for errors */
CORBA_exception_free (&ev);
result = NULL;
@@ -310,7 +318,10 @@ nautilus_directory_set_file_metadata (Na
Nautilus_Metafile_set (metafile, file_name, key, default_metadata, metadata, &ev);
- /* FIXME bugzilla.gnome.org 46664: examine ev for errors */
+ if (ev._major != CORBA_NO_EXCEPTION) {
+ g_debug ("CORBA exception when setting file metadata: %s", CORBA_exception_id (&ev));
+ }
+
CORBA_exception_free (&ev);
}
@@ -363,7 +374,10 @@ nautilus_directory_set_file_metadata_lis
Nautilus_Metafile_set_list (metafile, file_name, list_key, list_subkey, corba_list, &ev);
- /* FIXME bugzilla.gnome.org 46664: examine ev for errors */
+ if (ev._major != CORBA_NO_EXCEPTION) {
+ g_debug ("CORBA exception when setting file metadata list: %s", CORBA_exception_id (&ev));
+ }
+
CORBA_exception_free (&ev);
CORBA_free (corba_list);
@@ -381,15 +395,14 @@ nautilus_directory_get_boolean_file_meta
result_as_string = nautilus_directory_get_file_metadata
(directory, file_name, key,
default_metadata ? "true" : "false");
+ g_assert (result_as_string != NULL);
if (g_ascii_strcasecmp (result_as_string, "true") == 0) {
result = TRUE;
} else if (g_ascii_strcasecmp (result_as_string, "false") == 0) {
result = FALSE;
} else {
- if (result_as_string != NULL) {
- g_warning ("boolean metadata with value other than true or false");
- }
+ g_error ("boolean metadata with value other than true or false");
result = default_metadata;
}
@@ -490,7 +503,10 @@ nautilus_directory_copy_file_metadata (N
Nautilus_Metafile_copy (metafile, source_file_name,
destination_uri, destination_file_name, &ev);
- /* FIXME bugzilla.gnome.org 46664: examine ev for errors */
+ if (ev._major != CORBA_NO_EXCEPTION) {
+ g_debug ("CORBA exception when copying file metadata: %s", CORBA_exception_id (&ev));
+ }
+
CORBA_exception_free (&ev);
g_free (destination_uri);
@@ -516,7 +532,10 @@ nautilus_directory_remove_file_metadata
Nautilus_Metafile_remove (metafile, file_name, &ev);
- /* FIXME bugzilla.gnome.org 46664: examine ev for errors */
+ if (ev._major != CORBA_NO_EXCEPTION) {
+ g_debug ("CORBA exception when removing file metadata: %s", CORBA_exception_id (&ev));
+ }
+
CORBA_exception_free (&ev);
}
@@ -542,7 +561,10 @@ nautilus_directory_rename_file_metadata
Nautilus_Metafile_rename (metafile, old_file_name, new_file_name, &ev);
- /* FIXME bugzilla.gnome.org 46664: examine ev for errors */
+ if (ev._major != CORBA_NO_EXCEPTION) {
+ g_debug ("CORBA exception when renaming file metadata: %s", CORBA_exception_id (&ev));
+ }
+
CORBA_exception_free (&ev);
}
@@ -566,7 +588,10 @@ nautilus_directory_rename_directory_meta
Nautilus_Metafile_rename_directory (metafile, new_directory_uri, &ev);
- /* FIXME bugzilla.gnome.org 46664: examine ev for errors */
+ if (ev._major != CORBA_NO_EXCEPTION) {
+ g_debug ("CORBA exception when renaming directory metadata: %s", CORBA_exception_id (&ev));
+ }
+
CORBA_exception_free (&ev);
}
@@ -598,7 +623,10 @@ nautilus_directory_register_metadata_mon
BONOBO_OBJREF (directory->details->metafile_monitor),
&ev);
- /* FIXME bugzilla.gnome.org 46664: examine ev for errors */
+ if (ev._major != CORBA_NO_EXCEPTION) {
+ g_debug ("CORBA exception when registering metadata monitor: %s", CORBA_exception_id (&ev));
+ }
+
CORBA_exception_free (&ev);
}
@@ -624,7 +652,10 @@ nautilus_directory_unregister_metadata_m
BONOBO_OBJREF (directory->details->metafile_monitor),
&ev);
- /* FIXME bugzilla.gnome.org 46664: examine ev for errors */
+ if (ev._major != CORBA_NO_EXCEPTION) {
+ g_debug ("CORBA exception when unregistering metadata monitor: %s", CORBA_exception_id (&ev));
+ }
+
CORBA_exception_free (&ev);
bonobo_object_unref (directory->details->metafile_monitor);
--- nautilus/libnautilus-private/nautilus-metafile.c.orig 2006-10-03 10:47:27.000000000 -0500
+++ nautilus/libnautilus-private/nautilus-metafile.c 2006-10-03 10:47:40.000000000 -0500
@@ -532,22 +532,34 @@ corba_rename_directory (PortableServer_S
}
static GList *
-find_monitor_node (GList *monitors, const Nautilus_MetafileMonitor monitor)
+find_monitor_node (GList *monitors,
+ const Nautilus_MetafileMonitor monitor,
+ CORBA_string *error)
{
GList *node;
CORBA_Environment ev;
Nautilus_MetafileMonitor cur_monitor;
+ g_assert (error != NULL);
+ *error = NULL;
+
CORBA_exception_init (&ev);
for (node = monitors; node != NULL; node = node->next) {
cur_monitor = node->data;
- if (CORBA_Object_is_equivalent (cur_monitor, monitor, &ev)) {
+ gboolean equivalent;
+
+ equivalent = CORBA_Object_is_equivalent (cur_monitor, monitor, &ev);
+ if (ev._major != CORBA_NO_EXCEPTION) {
+ node = NULL;
+ *error = CORBA_string_dup (CORBA_exception_id (&ev));
+ break;
+ }
+
+ if (equivalent) {
break;
}
}
-
- /* FIXME bugzilla.gnome.org 46664: examine ev for errors */
CORBA_exception_free (&ev);
@@ -560,10 +572,19 @@ corba_register_monitor (PortableServer_S
CORBA_Environment *ev)
{
NautilusMetafile *metafile;
+ CORBA_string error;
+ gboolean found;
metafile = NAUTILUS_METAFILE (bonobo_object_from_servant (servant));
- g_return_if_fail (find_monitor_node (metafile->details->monitors, monitor) == NULL);
+ found = find_monitor_node (metafile->details->monitors, monitor, &error) != NULL;
+ g_assert (!found || error != NULL);
+
+ if (error != NULL) {
+ g_debug ("CORBA exception when finding monitor node during monitor registration: %s", error);
+ CORBA_free (error);
+ return;
+ }
metafile->details->monitors = g_list_prepend (metafile->details->monitors,
(gpointer) CORBA_Object_duplicate (monitor, ev));
@@ -578,12 +599,18 @@ corba_unregister_monitor (PortableServer
{
NautilusMetafile *metafile;
GList *node;
+ CORBA_string error;
metafile = NAUTILUS_METAFILE (bonobo_object_from_servant (servant));
- node = find_monitor_node (metafile->details->monitors, monitor);
+ node = find_monitor_node (metafile->details->monitors, monitor, &error);
+ g_assert (node != NULL || error != NULL);
- g_return_if_fail (node != NULL);
+ if (error != NULL) {
+ g_debug ("CORBA exception when finding monitor node during monitor unregistration: %s", error);
+ CORBA_free (error);
+ return;
+ }
metafile->details->monitors = g_list_remove_link (metafile->details->monitors, node);
@@ -603,7 +630,9 @@ nautilus_metafile_notify_metafile_ready
for (node = metafile->details->monitors; node != NULL; node = node->next) {
monitor = node->data;
Nautilus_MetafileMonitor_metafile_ready (monitor, &ev);
- /* FIXME bugzilla.gnome.org 46664: examine ev for errors */
+ if (ev._major != CORBA_NO_EXCEPTION) {
+ g_debug ("CORBA exception when notifying about ready metafile: %s", CORBA_exception_id (&ev));
+ }
}
CORBA_exception_free (&ev);
@@ -622,7 +651,9 @@ call_metafile_changed (NautilusMetafile
for (node = metafile->details->monitors; node != NULL; node = node->next) {
monitor = node->data;
Nautilus_MetafileMonitor_metafile_changed (monitor, file_names, &ev);
- /* FIXME bugzilla.gnome.org 46664: examine ev for errors */
+ if (ev._major != CORBA_NO_EXCEPTION) {
+ g_debug ("CORBA exception when notifying about changed metafile: %s", CORBA_exception_id (&ev));
+ }
}
CORBA_exception_free (&ev);