From d930283559d542e2ddc2414fc9ebab0ca0ec964d Mon Sep 17 00:00:00 2001 From: Pavel Uhanov <pavel.uhanov@demlabs.net> Date: Fri, 21 Jul 2023 12:44:33 +0700 Subject: [PATCH] [+] add s_stake_net_clear func --- .../dap_chain_net_srv_stake_pos_delegate.c | 45 ++++++++++++++----- 1 file changed, 34 insertions(+), 11 deletions(-) diff --git a/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c b/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c index c65497830c..4f1659cfe6 100644 --- a/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c +++ b/modules/service/stake/dap_chain_net_srv_stake_pos_delegate.c @@ -51,6 +51,10 @@ static void s_stake_updater_callback(dap_ledger_t *a_ledger, dap_chain_datum_tx_ static void s_cache_data(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx, dap_chain_addr_t *a_signing_addr); +static void s_stake_clear(); + +static void s_stake_net_clear(dap_chain_net_t *a_net); + static dap_chain_net_srv_stake_t *s_srv_stake = NULL; /** @@ -100,29 +104,49 @@ int dap_chain_net_srv_stake_pos_delegate_init() return 0; } -void s_stake_ht_clear() +/** + * @brief delete ht and hh concretic net from s_srv_stake + */ +void s_stake_net_clear(dap_chain_net_t *a_net) { - dap_chain_net_srv_stake_item_t *l_stake, *l_tmp; + dap_chain_net_srv_stake_item_t *l_stake = NULL, *l_tmp = NULL; HASH_ITER(ht, s_srv_stake->tx_itemlist, l_stake, l_tmp) { // Clang bug at this, l_stake should change at every loop cycle - HASH_DELETE(ht, s_srv_stake->tx_itemlist, l_stake); + if (l_stake->net->pub.id.uint64 == a_net->pub.id.uint64) + HASH_DELETE(ht, s_srv_stake->tx_itemlist, l_stake); } HASH_ITER(hh, s_srv_stake->itemlist, l_stake, l_tmp) { // Clang bug at this, l_stake should change at every loop cycle - HASH_DEL(s_srv_stake->itemlist, l_stake); - DAP_DELETE(l_stake); + if (l_stake->net->pub.id.uint64 == a_net->pub.id.uint64) { + HASH_DEL(s_srv_stake->itemlist, l_stake); + DAP_DELETE(l_stake); + } } - dap_chain_net_srv_stake_cache_item_t *l_cache_item, *l_cache_tmp; + dap_chain_net_srv_stake_cache_item_t *l_cache_item = NULL, *l_cache_tmp = NULL; HASH_ITER(hh, s_srv_stake->cache, l_cache_item, l_cache_tmp) { // Clang bug at this, l_stake should change at every loop cycle - HASH_DEL(s_srv_stake->cache, l_cache_item); - DAP_DELETE(l_cache_item); + if (l_cache_item->signing_addr.net_id.uint64 == a_net->pub.id.uint64) { + HASH_DEL(s_srv_stake->cache, l_cache_item); + DAP_DELETE(l_cache_item); + } + } +} + +/** + * @brief delete all nets ht and hh from s_srv_stake + */ +void s_stake_clear() +{ + uint16_t l_net_count; + dap_chain_net_t **l_net_list = dap_chain_net_list(&l_net_count); + for (uint16_t i = 0; i < l_net_count; i++) { + s_stake_net_clear(l_net_list[i]); } } void dap_chain_net_srv_stake_pos_delegate_deinit() { - s_stake_ht_clear(); + s_stake_clear(); DAP_DEL_Z(s_srv_stake); } @@ -361,8 +385,7 @@ void dap_chain_net_srv_stake_purge(dap_chain_net_t *a_net) char *l_gdb_group = dap_chain_ledger_get_gdb_group(l_ledger, DAP_CHAIN_NET_SRV_STAKE_POS_DELEGATE_GDB_GROUP); dap_global_db_del(l_gdb_group, NULL, NULL, NULL); DAP_DELETE(l_gdb_group); - - s_stake_ht_clear(); + s_stake_net_clear(a_net); } -- GitLab