File xs-08-add_change_node-fix.patch of Package xen.11298

commit dc6d67804fbf043e53f8f7805c7a39b279a47f5a
Author: Juergen Gross <jgross@suse.com>
Date:   Thu Oct 27 11:55:52 2016 +0200

    xenstore: fix add_change_node()
    
    add_change_node() in xenstored is used to add a modified node to the
    list of changed nodes of one transaction. It is being called with the
    recurse parameter set to true when removing a node in order to get
    watches for children of the node fired at transaction end, too.
    
    If, however, the node to be deleted had been modified in the same
    transaction the recurse parameter of add_change_node() is lost as
    an entry already in the list of the changed nodes won't be entered
    again.
    
    Signed-off-by: Juergen Gross <jgross@suse.com>
    Reviewed-by: Wei Liu <wei.liu2@citrix.com>
    Release-acked-by: Wei Liu <wei.liu2@citrix.com>

Index: xen-4.5.5-testing/tools/xenstore/xenstored_transaction.c
===================================================================
--- xen-4.5.5-testing.orig/tools/xenstore/xenstored_transaction.c
+++ xen-4.5.5-testing/tools/xenstore/xenstored_transaction.c
@@ -103,9 +103,13 @@ void add_change_node(struct transaction
 		return;
 	}
 
-	list_for_each_entry(i, &trans->changes, list)
-		if (streq(i->node, node))
+	list_for_each_entry(i, &trans->changes, list) {
+		if (streq(i->node, node)) {
+			if (recurse)
+				i->recurse = recurse;
 			return;
+		}
+	}
 
 	i = talloc(trans, struct changed_node);
 	i->node = talloc_strdup(i, node);
openSUSE Build Service is sponsored by