mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2026-02-06 09:52:32 +01:00
Defaults proxies instance are stored in a global name tree. When there is a name conflict and the older entry cannot be simply discarded as it is already referenced, the older entry is instead removed from the name tree and inserted into the orphaned list. The purpose of the orphaned list was to guarantee that any remaining unreferenced defaults are purged either on postparsing or deinit. However, this is in fact completely useless. Indeed on postparsing, orphaned entries are always referenced. On deinit instead, defaults are already freed along the cleanup of all frontend/backend instances clean up, thanks to their refcounting. This patch streamlines this by removing orphaned list. Instead, a defaults section is inserted into a new global defaults_list during their whole lifetime. This is not strictly necessary but it ensures that defaults instances can still be accessed easily in the future if needed even if not present in the name tree. On deinit, a BUG_ON() is added to ensure that defaults_list is indeed emptied. Another benefit from this patch is to simplify the defaults deletion procedure. Orphaned simple list is replaced by a proper double linked list implementation, so a single LIST_DELETE() is now performed. This will be notably useful as defaults may be removed at runtime in the future if backends deletion at runtime is implemented.