object_property_del_child() previously performed two full iterations over obj->properties: the first to find the matching child property and call its release callback, the second to find the same property again and remove it from the hash table.
Merge the two loops into one: when the matching property is found, call the release callback and immediately remove the entry via g_hash_table_iter_remove(), then break. This halves the number of hash table operations in the common case and avoids the redundant second scan. Signed-off-by: Bin Guo <[email protected]> --- qom/object.c | 7 ------- 1 file changed, 7 deletions(-) diff --git a/qom/object.c b/qom/object.c index f981e27044..9c0e8dfd02 100644 --- a/qom/object.c +++ b/qom/object.c @@ -629,13 +629,6 @@ static void object_property_del_child(Object *obj, Object *child) prop->release(obj, prop->name, prop->opaque); prop->release = NULL; } - break; - } - } - g_hash_table_iter_init(&iter, obj->properties); - while (g_hash_table_iter_next(&iter, &key, &value)) { - prop = value; - if (object_property_is_child(prop) && prop->opaque == child) { g_hash_table_iter_remove(&iter); break; } -- 2.50.1 (Apple Git-155)
