commit 77e696d6c9617dfe64214ef468cc3140b8c97f53 parent e43163cf91a78d4a343c167b5a81a7a992518a2d Author: Christian Grothoff <grothoff@gnunet.org> Date: Fri, 14 Aug 2026 23:25:24 +0200 stop timeout task once we are resumed Diffstat:
| M | src/backend/taler-merchant-httpd_post-orders-ORDER_ID-pay.c | | | 11 | +++++++++++ |
1 file changed, 11 insertions(+), 0 deletions(-)
diff --git a/src/backend/taler-merchant-httpd_post-orders-ORDER_ID-pay.c b/src/backend/taler-merchant-httpd_post-orders-ORDER_ID-pay.c @@ -893,6 +893,17 @@ static void pay_resume (struct PayContext *pc) { GNUNET_assert (GNUNET_YES == pc->suspended); + /* We only ever suspend while we interact with an exchange or the + Donau; thus, once we resume, the timeout for that interaction is + no longer relevant and MUST be cancelled: otherwise it could fire + after we already resumed (and possibly even after we queued the + response) and then hit the "GNUNET_YES == pc->suspended" assertion + in handle_pay_timeout(). */ + if (NULL != pc->batch_deposits.timeout_task) + { + GNUNET_SCHEDULER_cancel (pc->batch_deposits.timeout_task); + pc->batch_deposits.timeout_task = NULL; + } pc->suspended = GNUNET_NO; MHD_resume_connection (pc->connection); TALER_MHD_daemon_trigger (); /* we resumed, kick MHD */