From 74801782893043d354cdbb6bd1d645e712bc0d58 Mon Sep 17 00:00:00 2001 From: Thomas Fitzsimmons Date: Wed, 27 Mar 2013 16:13:16 -0400 Subject: [PATCH] dbus/dbus-object-tree.c: Add test case for parent removal fix --- dbus/dbus-object-tree.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/dbus/dbus-object-tree.c b/dbus/dbus-object-tree.c index 4d1e4988..95d5234d 100644 --- a/dbus/dbus-object-tree.c +++ b/dbus/dbus-object-tree.c @@ -2088,6 +2088,30 @@ object_tree_test_iteration (void *data) _dbus_assert (!find_subtree_registered_or_unregistered (tree, path1)); _dbus_assert (find_subtree_registered_or_unregistered (tree, path0)); + /* Test that registered parents cannot be freed out from under their + children, and that if they are unregistered before their children, they + are still freed when their children are unregistered */ + if (!do_register (tree, path1, TRUE, 1, tree_test_data)) + goto out; + if (!do_register (tree, path2, TRUE, 2, tree_test_data)) + goto out; + + _dbus_assert (find_subtree (tree, path1, NULL)); + _dbus_assert (find_subtree (tree, path2, NULL)); + + _dbus_object_tree_unregister_and_unlock (tree, path1); + _dbus_assert (!find_subtree (tree, path1, NULL)); + _dbus_assert (find_subtree (tree, path2, NULL)); + _dbus_assert (find_subtree_registered_or_unregistered (tree, path1)); + _dbus_assert (find_subtree_registered_or_unregistered (tree, path0)); + + _dbus_object_tree_unregister_and_unlock (tree, path2); + _dbus_assert (!find_subtree (tree, path1, NULL)); + _dbus_assert (!find_subtree_registered_or_unregistered (tree, path1)); + _dbus_assert (!find_subtree (tree, path2, NULL)); + _dbus_assert (!find_subtree_registered_or_unregistered (tree, path2)); + _dbus_assert (find_subtree_registered_or_unregistered (tree, path0)); + /* Register it all again, and test dispatch */ if (!do_register (tree, path0, TRUE, 0, tree_test_data))