summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2021-11-04 19:23:16 +0100
committerChristian Grothoff <christian@grothoff.org>2021-11-04 19:23:16 +0100
commit3a6cdc4dc180b2f1dc8b761b613b34481b1ea3c1 (patch)
tree3cfafd2ed18278a86b48d673589ca4a153807b8f
parenta8825a62a9801bba5ef06c4dd568a55259760ca2 (diff)
downloadmerchant-3a6cdc4dc180b2f1dc8b761b613b34481b1ea3c1.tar.gz
merchant-3a6cdc4dc180b2f1dc8b761b613b34481b1ea3c1.tar.bz2
merchant-3a6cdc4dc180b2f1dc8b761b613b34481b1ea3c1.zip
bugfix pickup DLL mangement logic
-rw-r--r--src/backend/taler-merchant-httpd_post-tips-ID-pickup.c23
1 files changed, 22 insertions, 1 deletions
diff --git a/src/backend/taler-merchant-httpd_post-tips-ID-pickup.c b/src/backend/taler-merchant-httpd_post-tips-ID-pickup.c
index fc4c6bda..4336462e 100644
--- 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);