From 8f5a6ff60d8d9a6ed0f6995d49e6294864dee32c Mon Sep 17 00:00:00 2001 From: Niels Dossche <7771979+nielsdos@users.noreply.github.com> Date: Sun, 16 Feb 2025 16:36:49 +0100 Subject: [PATCH] Reduce memory allocations in querySelector resolution (#17821) These memory allocations at the entry don't need to happen because they're live for the entire evaluation. --- .../lexbor/selectors-adapted/selectors.c | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/ext/dom/lexbor/lexbor/selectors-adapted/selectors.c b/ext/dom/lexbor/lexbor/selectors-adapted/selectors.c index 8bd996a3910fe..1ce943d36000d 100644 --- a/ext/dom/lexbor/lexbor/selectors-adapted/selectors.c +++ b/ext/dom/lexbor/lexbor/selectors-adapted/selectors.c @@ -338,16 +338,14 @@ lxb_selectors_find(lxb_selectors_t *selectors, const xmlNode *root, const lxb_css_selector_list_t *list, lxb_selectors_cb_f cb, void *ctx) { - lxb_selectors_entry_t *entry; + lxb_selectors_entry_t entry = {0}; lxb_selectors_nested_t nested; - entry = lexbor_dobject_calloc(selectors->objs); - - entry->combinator = LXB_CSS_SELECTOR_COMBINATOR_CLOSE; - entry->selector = list->last; + entry.combinator = LXB_CSS_SELECTOR_COMBINATOR_CLOSE; + entry.selector = list->last; nested.parent = NULL; - nested.entry = entry; + nested.entry = &entry; nested.cb = cb; nested.ctx = ctx; @@ -363,20 +361,19 @@ lxb_selectors_match_node(lxb_selectors_t *selectors, const xmlNode *node, lxb_selectors_cb_f cb, void *ctx) { lxb_status_t status; - lxb_selectors_entry_t *entry; lxb_selectors_nested_t nested; if (!CMP_NODE_TYPE(node, XML_ELEMENT_NODE)) { return LXB_STATUS_OK; } - entry = lexbor_dobject_calloc(selectors->objs); + lxb_selectors_entry_t entry = {0}; - entry->combinator = LXB_CSS_SELECTOR_COMBINATOR_CLOSE; - entry->selector = list->last; + entry.combinator = LXB_CSS_SELECTOR_COMBINATOR_CLOSE; + entry.selector = list->last; nested.parent = NULL; - nested.entry = entry; + nested.entry = &entry; nested.cb = cb; nested.ctx = ctx;