]> git.kaiwu.me - haproxy.git/commit
MINOR: proxy: simplify defaults proxies list storage
authorAmaury Denoyelle <adenoyelle@haproxy.com>
Tue, 20 Jan 2026 13:33:46 +0000 (14:33 +0100)
committerAmaury Denoyelle <adenoyelle@haproxy.com>
Thu, 22 Jan 2026 16:57:09 +0000 (17:57 +0100)
commit848e0cd0523cca96be0d872ee7f1a79ce5c73b1c
tree4b9e0307f266fc12250546381f070b7937818922
parent434e97904608b0ee97878363dd1124f1359659fc
MINOR: proxy: simplify defaults proxies list storage

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.
include/haproxy/proxy-t.h
include/haproxy/proxy.h
src/cfgparse-listen.c
src/haproxy.c
src/proxy.c