mime: avoid quadratic complexity in MimeDecAddEntity

Ticket: #6306

Keep a reference to last child, consume a bit more RAM to save CPU
pull/9662/head
Philippe Antoine 1 year ago committed by Victor Julien
parent 986a4417c6
commit 737bc4f219

@ -384,7 +384,7 @@ static MimeDecUrl * MimeDecAddUrl(MimeDecEntity *entity, uint8_t *url, uint32_t
*/
MimeDecEntity * MimeDecAddEntity(MimeDecEntity *parent)
{
MimeDecEntity *curr, *node = SCMalloc(sizeof(MimeDecEntity));
MimeDecEntity *node = SCMalloc(sizeof(MimeDecEntity));
if (unlikely(node == NULL)) {
return NULL;
}
@ -394,12 +394,10 @@ MimeDecEntity * MimeDecAddEntity(MimeDecEntity *parent)
if (parent != NULL) {
if (parent->child == NULL) {
parent->child = node;
parent->last_child = node;
} else {
curr = parent->child;
while (curr->next != NULL) {
curr = curr->next;
}
curr->next = node;
parent->last_child->next = node;
parent->last_child = node;
}
}

@ -144,6 +144,7 @@ typedef struct MimeDecEntity {
uint8_t *msg_id; /**< Quick access pointer to message Id */
struct MimeDecEntity *next; /**< Pointer to list of sibling entities */
struct MimeDecEntity *child; /**< Pointer to list of child entities */
struct MimeDecEntity *last_child; /**< Pointer to tail of the list of child entities */
} MimeDecEntity;
/**

Loading…
Cancel
Save