diff options
author | Christian Grothoff <christian@grothoff.org> | 2021-11-04 19:23:16 +0100 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2021-11-04 19:23:16 +0100 |
commit | 3a6cdc4dc180b2f1dc8b761b613b34481b1ea3c1 (patch) | |
tree | 3cfafd2ed18278a86b48d673589ca4a153807b8f | |
parent | a8825a62a9801bba5ef06c4dd568a55259760ca2 (diff) | |
download | merchant-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.c | 23 |
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); |