From 09aef94376a11bca40e551897454f0a5bf7e4de6 Mon Sep 17 00:00:00 2001 From: Raphael Michel Date: Mon, 20 Jul 2026 13:14:49 +0200 Subject: [PATCH] Vouchers: Fix race condition that allows budget to be exceeded (#6396) --- src/pretix/base/services/orders.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/pretix/base/services/orders.py b/src/pretix/base/services/orders.py index 9d8298bfc..23b21c9be 100644 --- a/src/pretix/base/services/orders.py +++ b/src/pretix/base/services/orders.py @@ -791,6 +791,12 @@ def _check_positions(event: Event, now_dt: datetime, time_machine_now_dt: dateti [op.seat for op in sorted_positions if op.seat], shared_lock_objects=[event] ) + elif any(cp.voucher and cp.voucher.budget for cp in sorted_positions): + # Voucher budgets are not guaranteed by the cart manager + lock_objects( + [op.voucher for op in sorted_positions if op.voucher and op.voucher.budget], + shared_lock_objects=[event] + ) q_avail = Counter() v_avail = Counter()