dbus/dbus-object-tree.c: Add test case for parent removal fix
authorThomas Fitzsimmons <fitzsim@cisco.com>
Wed, 27 Mar 2013 20:16:24 +0000 (16:16 -0400)
committerThomas Fitzsimmons <fitzsim@cisco.com>
Wed, 27 Mar 2013 20:16:24 +0000 (16:16 -0400)
dbus/dbus-object-tree.c

index 8ae0f23..325bc89 100644 (file)
@@ -2138,6 +2138,31 @@ 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 freeing multiple children from the same path */
+  if (!do_register (tree, path3, TRUE, 3, tree_test_data))
+    goto out;
+  if (!do_register (tree, path4, TRUE, 4, tree_test_data))
+    goto out;
+
+  _dbus_assert (find_subtree (tree, path3, NULL));
+  _dbus_assert (find_subtree (tree, path4, NULL));
+
+  _dbus_object_tree_unregister_and_unlock (tree, path3);
+  _dbus_assert (!find_subtree (tree, path3, NULL));
+  _dbus_assert (!find_subtree_registered_or_unregistered (tree, path3));
+  _dbus_assert (find_subtree (tree, path4, NULL));
+  _dbus_assert (find_subtree_registered_or_unregistered (tree, path4));
+  _dbus_assert (find_subtree_registered_or_unregistered (tree, path2));
+  _dbus_assert (find_subtree_registered_or_unregistered (tree, path1));
+
+  _dbus_object_tree_unregister_and_unlock (tree, path4);
+  _dbus_assert (!find_subtree (tree, path4, NULL));
+  _dbus_assert (!find_subtree_registered_or_unregistered (tree, path4));
+  _dbus_assert (!find_subtree (tree, path3, NULL));
+  _dbus_assert (!find_subtree_registered_or_unregistered (tree, path3));
+  _dbus_assert (!find_subtree_registered_or_unregistered (tree, path2));
+  _dbus_assert (!find_subtree_registered_or_unregistered (tree, path1));
+
   /* Register it all again, and test dispatch */
   
   if (!do_register (tree, path0, TRUE, 0, tree_test_data))