]> git.ipfire.org Git - thirdparty/haproxy.git/commit
BUG/MINOR: hlua_fcn: restore server pairs iterator pointer consistency
authorAurelien DARRAGON <adarragon@haproxy.com>
Wed, 11 Dec 2024 09:42:11 +0000 (10:42 +0100)
committerAurelien DARRAGON <adarragon@haproxy.com>
Wed, 11 Dec 2024 09:52:11 +0000 (10:52 +0100)
commit358166ae6a3e98d36b378c7eeab1673cc8b4a4dd
tree2379fa20ec7f87c039698df8721152da0c6419b9
parent647a2906626e9c3d9c3349d338a35798325496f2
BUG/MINOR: hlua_fcn: restore server pairs iterator pointer consistency

Since 9c91b30 ("MINOR: server: remove prev_deleted server list"), hlua
server pair iterator may use and return invalid (stale) server pointer
if multiple servers were deleted between two iterations.

Indeed, the server refcount mechanism (using srv_take()) is no longer
sufficient as the prev_deleted mitigation was removed.

To ensure server pointer consistency between two yields, the new watcher
mechanism must be used (as it already the case for stats dumping).

Thus in this patch we slightly change the server iteration logic:
hlua_server_list_iterator_context struct now stores the next valid server
pointer, and a watcher is added to ensure this pointer is never stale.

Then in hlua_listable_servers_pairs_iterator(), this next pointer is used
to create the Lua server object, and the next valid pointer is obtained by
leveraging watcher_next().

No backport needed unless 9c91b30 ("MINOR: server: remove prev_deleted
server list") is. Please note that dynamic servers were not supported in
Lua prior to 2.8, so it doesn't make sense to backport this patch further
than 2.8.
include/haproxy/hlua-t.h
src/hlua_fcn.c