commit 3a6cdc4dc180b2f1dc8b761b613b34481b1ea3c1
parent a8825a62a9801bba5ef06c4dd568a55259760ca2
Author: Christian Grothoff <christian@grothoff.org>
Date: Thu, 4 Nov 2021 19:23:16 +0100
bugfix pickup DLL mangement logic
Diffstat:
1 file changed, 22 insertions(+), 1 deletion(-)
diff --git a/src/backend/taler-merchant-httpd_post-tips-ID-pickup.c b/src/backend/taler-merchant-httpd_post-tips-ID-pickup.c
@@ -252,11 +252,17 @@ pick_context_cleanup (void *cls)
void
TMH_force_tip_pickup_resume ()
{
+ struct PickupContext *nxt;
+
for (struct PickupContext *pc = pc_head;
NULL != pc;
- pc = pc->next)
+ pc = nxt)
{
+ nxt = pc->next;
stop_operations (pc);
+ GNUNET_CONTAINER_DLL_remove (pc_head,
+ pc_tail,
+ pc);
MHD_resume_connection (pc->connection);
}
}
@@ -293,6 +299,9 @@ withdraw_cb (void *cls,
TALER_MHD_MAKE_JSON_PACK (
TALER_JSON_pack_ec (TALER_EC_MERCHANT_TIP_PICKUP_EXCHANGE_ERROR),
TMH_pack_exchange_reply (hr));
+ GNUNET_CONTAINER_DLL_remove (pc_head,
+ pc_tail,
+ pc);
MHD_resume_connection (pc->connection);
TALER_MHD_daemon_trigger (); /* we resumed, kick MHD */
return;
@@ -309,6 +318,9 @@ withdraw_cb (void *cls,
pc->response = TALER_MHD_make_error (
TALER_EC_GENERIC_DB_STORE_FAILED,
"blind signature");
+ GNUNET_CONTAINER_DLL_remove (pc_head,
+ pc_tail,
+ pc);
MHD_resume_connection (pc->connection);
TALER_MHD_daemon_trigger (); /* we resumed, kick MHD */
return;
@@ -316,6 +328,9 @@ withdraw_cb (void *cls,
if (NULL == pc->po_head)
{
stop_operations (pc); /* stops timeout job */
+ GNUNET_CONTAINER_DLL_remove (pc_head,
+ pc_tail,
+ pc);
MHD_resume_connection (pc->connection);
TALER_MHD_daemon_trigger (); /* we resumed, kick MHD */
}
@@ -438,6 +453,9 @@ do_timeout (void *cls)
pc->response = TALER_MHD_make_error (
TALER_EC_MERCHANT_GENERIC_EXCHANGE_TIMEOUT,
NULL);
+ GNUNET_CONTAINER_DLL_remove (pc_head,
+ pc_tail,
+ pc);
MHD_resume_connection (pc->connection);
TALER_MHD_daemon_trigger (); /* we resumed, kick MHD */
}
@@ -956,6 +974,9 @@ RETRY:
NULL);
}
MHD_suspend_connection (connection);
+ GNUNET_CONTAINER_DLL_insert (pc_head,
+ pc_tail,
+ pc);
pc->tt = GNUNET_SCHEDULER_add_delayed (EXCHANGE_TIMEOUT,
&do_timeout,
pc);