patches/glib-11-gio-fen-assertion-on-root.diff
changeset 18035 2152dea8585d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/glib-11-gio-fen-assertion-on-root.diff	Wed May 26 06:06:02 2010 +0000
@@ -0,0 +1,32 @@
+diff --git a/gio/fen/fen-node.c b/gio/fen/fen-node.c
+index 7238e36..a57e196 100644
+--- a/gio/fen/fen-node.c
++++ b/gio/fen/fen-node.c
+@@ -417,9 +417,24 @@ node_adjust_deleted(node_t* f)
+ 
+     FN_W ("%s %s\n", __func__, NODE_NAME(f));
+ 
+-    for (ancestor = node_find_accessible_ancestor(f);
+-         !NODE_HAS_STATE(ancestor, NODE_STATE_ASSOCIATED) && port_add(ancestor) != 0;
+-         ancestor = node_find_accessible_ancestor(ancestor)) { /* Empty */ }
++    for (ancestor = NODE_PARENT(f);
++         ancestor != NULL;
++         ancestor = NODE_PARENT(ancestor)) {
++        /* Stop if we find a node which been already associated or is existed
++         * and can be associated.
++         */
++        if (NODE_HAS_STATE(ancestor, NODE_STATE_ASSOCIATED) ||
++          (node_lstat(ancestor) == 0 && port_add(ancestor) == 0)) {
++            break;
++        }
++    }
++
++    /* We assume we shouldn't reach here, because Root is always existed and
++     * associated. But given bugster#6955199, if PORT FS has problems on root,
++     * we may reach here. So just return ROOT and the whole GIO fen backend will
++     * fail.
++     */
++    /* g_assert(ancestor != NULL); */
+ }
+ 
+