diff --git a/modules/chain/dap_chain.c b/modules/chain/dap_chain.c index 87579e99628e42a39af6031136b753f07efd5cac..bd3f5ca812dd788183fe458920028d0b2f16c512 100644 --- a/modules/chain/dap_chain.c +++ b/modules/chain/dap_chain.c @@ -552,15 +552,15 @@ bool dap_chain_has_file_store(dap_chain_t * a_chain) */ int dap_chain_save_all (dap_chain_t * l_chain) { - int ret = 0; + int l_ret = 0; pthread_rwlock_rdlock(&l_chain->cell_rwlock); - dap_chain_cell_t * l_item, *l_item_tmp = NULL; + dap_chain_cell_t *l_item = NULL, *l_item_tmp = NULL; HASH_ITER(hh,l_chain->cells,l_item,l_item_tmp){ if(dap_chain_cell_file_update(l_item) <= 0) - ret++; + l_ret++; } pthread_rwlock_unlock(&l_chain->cell_rwlock); - return ret; + return l_ret; } /** @@ -593,7 +593,7 @@ int dap_chain_load_all(dap_chain_t *a_chain) const char * l_filename = l_dir_entry->d_name; const char l_suffix[] = ".dchaincell"; size_t l_suffix_len = strlen(l_suffix); - if (strncmp(l_filename + strlen(l_filename) - l_suffix_len, l_suffix, l_suffix_len) == 0 ) { + if (!strncmp(l_filename + strlen(l_filename) - l_suffix_len, l_suffix, l_suffix_len)) { l_ret += dap_chain_cell_load(a_chain, l_filename); } } diff --git a/modules/chain/dap_chain_cell.c b/modules/chain/dap_chain_cell.c index e771db6ae459dc081fd3a04b533c0fdb4bd4efe7..b9b2cb4b9495b3da66d5ab896da17d0d2cf0e04e 100644 --- a/modules/chain/dap_chain_cell.c +++ b/modules/chain/dap_chain_cell.c @@ -180,7 +180,7 @@ void dap_chain_cell_delete(dap_chain_cell_t *a_cell) */ int dap_chain_cell_load(dap_chain_t * a_chain, const char * a_cell_file_path) { - int ret = 0; + int l_ret = 0; char l_file_path[MAX_PATH] = {'\0'}; snprintf(l_file_path, MAX_PATH, "%s/%s", DAP_CHAIN_PVT(a_chain)->file_storage_dir, a_cell_file_path); FILE *l_cell_file = fopen(l_file_path, "rb"); @@ -205,18 +205,18 @@ int dap_chain_cell_load(dap_chain_t * a_chain, const char * a_cell_file_path) return -3; } unsigned long q = 0; - size_t l_read; + size_t l_read = 0; uint64_t l_el_size = 0; while ((l_read = fread(&l_el_size, 1, sizeof(l_el_size), l_cell_file)) && !feof(l_cell_file)) { if (l_read != sizeof(l_el_size) || l_el_size == 0) { log_it(L_ERROR, "Corrupted element size %zu, chain %s is damaged", l_el_size, l_file_path); - ret = -4; + l_ret = -4; break; } dap_chain_atom_ptr_t l_element = DAP_NEW_SIZE(dap_chain_atom_ptr_t, l_el_size); if (!l_element) { log_it(L_ERROR, "Memory allocation error in dap_chain_cell_load, errno=%d", errno); - ret = -5; + l_ret = -5; break; } l_read = fread((void *)l_element, 1, l_el_size, l_cell_file); @@ -229,11 +229,11 @@ int dap_chain_cell_load(dap_chain_t * a_chain, const char * a_cell_file_path) } else { log_it(L_ERROR, "Read only %lu of %zu bytes, stop cell loading", l_read, l_el_size); DAP_DELETE(l_element); - ret = -6; + l_ret = -6; break; } } - if (ret < 0) { + if (l_ret < 0) { log_it(L_INFO, "Couldn't load all atoms, %lu only", q); } else { log_it(L_INFO, "Loaded all %lu atoms in cell %s", q, a_cell_file_path); @@ -241,7 +241,7 @@ int dap_chain_cell_load(dap_chain_t * a_chain, const char * a_cell_file_path) if (q) dap_chain_cell_create_fill2(a_chain, a_cell_file_path); fclose(l_cell_file); - return ret; + return l_ret; } diff --git a/modules/chain/dap_chain_ledger.c b/modules/chain/dap_chain_ledger.c index 93700d21d6695c7f2bc22cec6b2041fbeb92bde2..bfe13fd77c08c90c91cffd1b2d80f47f5c9e7523 100644 --- a/modules/chain/dap_chain_ledger.c +++ b/modules/chain/dap_chain_ledger.c @@ -1009,7 +1009,7 @@ void s_ledger_token_cache_update(dap_ledger_t *a_ledger, dap_chain_ledger_token_ if (dap_global_db_set(l_gdb_group, l_token_item->ticker, l_cache, l_cache_size, false, NULL, NULL)) { char *l_supply = dap_chain_balance_print(l_token_item->current_supply); log_it(L_WARNING, "Ledger cache mismatch, can't add token [%s] with supply %s", l_token_item->ticker, l_supply); - DAP_FREE(l_supply); + DAP_DELETE(l_supply); } DAP_DELETE(l_gdb_group); } diff --git a/modules/channel/chain-net/dap_stream_ch_chain_net.c b/modules/channel/chain-net/dap_stream_ch_chain_net.c index da1d49c44ec4be0d65da832d52821cd1d2f4f178..56b46630f9f0b3e306bc36b31d71443471352bb7 100644 --- a/modules/channel/chain-net/dap_stream_ch_chain_net.c +++ b/modules/channel/chain-net/dap_stream_ch_chain_net.c @@ -134,7 +134,7 @@ uint8_t dap_stream_ch_chain_net_get_id() /** * @brief dap_stream_ch_chain_net_init - * @return + * @return always 0 */ int dap_stream_ch_chain_net_init() { diff --git a/modules/channel/chain-voting/dap_stream_ch_chain_voting.c b/modules/channel/chain-voting/dap_stream_ch_chain_voting.c index a2b39e60f256b368a51e288693b72af953e88257..64cc05f10a90c326abdbe20d413d0e3ee170972d 100644 --- a/modules/channel/chain-voting/dap_stream_ch_chain_voting.c +++ b/modules/channel/chain-voting/dap_stream_ch_chain_voting.c @@ -126,7 +126,8 @@ void dap_stream_ch_chain_voting_message_write(dap_chain_net_t *a_net, dap_chain_ DAP_DUP_SIZE(a_voting_pkt, l_voting_pkt_size)); } -void dap_stream_ch_chain_voting_deinit() { +void dap_stream_ch_chain_voting_deinit() +{ struct voting_node_client_list *l_node_info_item, *l_node_info_tmp; HASH_ITER(hh, s_node_client_list, l_node_info_item, l_node_info_tmp) { // Clang bug at this, l_node_info_item should change at every loop cycle @@ -136,7 +137,8 @@ void dap_stream_ch_chain_voting_deinit() { } } -static void s_stream_ch_new(dap_stream_ch_t *a_ch, void *a_arg) { +static void s_stream_ch_new(dap_stream_ch_t *a_ch, void *a_arg) +{ UNUSED(a_arg); a_ch->internal = DAP_NEW_Z(dap_stream_ch_chain_voting_t); dap_stream_ch_chain_voting_t *l_ch_chain_voting = DAP_STREAM_CH_CHAIN_VOTING(a_ch); diff --git a/modules/common/dap_chain_common.c b/modules/common/dap_chain_common.c index 20fa9b9fc3e3a41ccda24a238caae7d07d3fd1ff..1fcc821a407146149b4683b7dcff0f400c02bf4a 100644 --- a/modules/common/dap_chain_common.c +++ b/modules/common/dap_chain_common.c @@ -1133,50 +1133,50 @@ void uint256_cvt_test (void) uint256.__lo.c = 1; cp = dap_chain_balance_print(uint256); - free(cp); + DAP_DELETE(cp); uint256 = uint256_zero; uint256.__lo.c = 1; cp = dap_chain_balance_to_coins(uint256); uint256 = dap_chain_coins_to_balance(cp); - free(cp); + DAP_DELETE(cp); uint256 = uint256_zero; uint256.__lo.c = 100000000; cp = dap_chain_balance_to_coins(uint256); uint256 = dap_chain_coins_to_balance(cp); - free(cp); + DAP_DELETE(cp); cp = dap_chain_balance_print333(uint256); - free(cp); + DAP_DELETE(cp); uint256.hi = dap_chain_uint128_from(-1); uint256.lo = dap_chain_uint128_from(-1); cp = dap_chain_balance_print333(uint256); - free(cp); + DAP_DELETE(cp); cp = dap_chain_balance_print(uint256); - free(cp); + DAP_DELETE(cp); cp = dap_cvt_uint256_to_str(uint256 ); uint256 = dap_cvt_str_to_uint256(cp); - free(cp); + DAP_DELETE(cp); uint256.hi = dap_chain_uint128_from(-1); uint256.lo = dap_chain_uint128_from(-1); cp = dap_cvt_uint256_to_str(uint256 ); - free(cp); + DAP_DELETE(cp); uint256.hi = dap_chain_uint128_from(123); uint256.lo = dap_chain_uint128_from(374607431768211455); cp = dap_chain_balance_to_coins256(uint256); uint256 = dap_chain_coins_to_balance(cp); - free(cp); + DAP_DELETE(cp); } #endif diff --git a/modules/common/dap_chain_datum_token.c b/modules/common/dap_chain_datum_token.c index 7dd41df3e236ba91cc11d69605d17d510c9cecf8..b1b68ee1eb51e031564863cba7107145a6eff5a5 100644 --- a/modules/common/dap_chain_datum_token.c +++ b/modules/common/dap_chain_datum_token.c @@ -336,7 +336,7 @@ dap_sign_t ** dap_chain_datum_token_signs_parse(dap_chain_datum_token_t * a_datu size_t l_sign_size = dap_sign_get_size(l_ret[i]); if (l_sign_size == 0 || l_sign_size > a_datum_token_size - l_offset) { *a_signs_total = 0; - DAP_FREE(l_ret); + DAP_DELETE(l_ret); return NULL; } (*a_signs_total)++; diff --git a/modules/consensus/block-poa/dap_chain_cs_block_poa.c b/modules/consensus/block-poa/dap_chain_cs_block_poa.c index 04f795aebd4b6bab6835b650bf7e033d986c5cd7..fe61bc15638d233c81b390f45755da9b561cc565 100644 --- a/modules/consensus/block-poa/dap_chain_cs_block_poa.c +++ b/modules/consensus/block-poa/dap_chain_cs_block_poa.c @@ -42,8 +42,7 @@ #define LOG_TAG "dap_chain_cs_block_poa" -typedef struct dap_chain_cs_dag_poa_pvt -{ +typedef struct dap_chain_cs_dag_poa_pvt { dap_enc_key_t *sign_key; dap_cert_t ** auth_certs; char * auth_certs_prefix; diff --git a/modules/consensus/block-poa/include/dap_chain_cs_block_poa.h b/modules/consensus/block-poa/include/dap_chain_cs_block_poa.h index eb73809ff8b5bf0ca3b0e05e37847d614c74b348..3e6eff7f93b9a156c1908a3f3c853bf92182545e 100644 --- a/modules/consensus/block-poa/include/dap_chain_cs_block_poa.h +++ b/modules/consensus/block-poa/include/dap_chain_cs_block_poa.h @@ -24,8 +24,7 @@ #pragma once #include "dap_chain_cs_blocks.h" -typedef struct dap_chain_cs_block_poa -{ +typedef struct dap_chain_cs_block_poa { dap_chain_t * chain; dap_chain_cs_blocks_t * blocks; void * _pvt; diff --git a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c index 6ed2566fe569a1f40d80a6afeabb1ceea50c78ed..37e2dd5f93487305afef846343156596fcc3d5a6 100644 --- a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c +++ b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c @@ -108,7 +108,7 @@ static dap_interval_timer_t s_poa_round_timer = NULL; * read parameters from config and register dag_poa commands to cellframe-node-cli * @return */ -int dap_chain_cs_dag_poa_init(void) +int dap_chain_cs_dag_poa_init() { // Add consensus constructor dap_chain_cs_add ("dag_poa", s_callback_new ); diff --git a/modules/consensus/dag-poa/include/dap_chain_cs_dag_poa.h b/modules/consensus/dag-poa/include/dap_chain_cs_dag_poa.h index 85ec14a53b4f2d90ea97ce97444a44c2d4f67d72..e6b234123dd07c5e93e8f95d07f9bbb1a7c65d0e 100644 --- a/modules/consensus/dag-poa/include/dap_chain_cs_dag_poa.h +++ b/modules/consensus/dag-poa/include/dap_chain_cs_dag_poa.h @@ -38,7 +38,7 @@ typedef struct dap_chain_cs_dag_poa #define DAP_CHAIN_CS_DAG_POA(a) ( (dap_chain_cs_dag_poa_t *) (a)->_inheritor) -int dap_chain_cs_dag_poa_init(void); +int dap_chain_cs_dag_poa_init(); void dap_chain_cs_dag_poa_deinit(void); dap_list_t *dap_chain_cs_dag_poa_get_auth_certs(dap_chain_t *a_chain, size_t *a_auth_certs_count, uint16_t *a_count_verify); void dap_chain_cs_dag_poa_presign_callback_set(dap_chain_t *a_chain, diff --git a/modules/consensus/esbocs/dap_chain_cs_esbocs.c b/modules/consensus/esbocs/dap_chain_cs_esbocs.c index ea2f6fd86e7577a98d3a6166ce6fd1635d1d733c..afb55abff216c3c6f27c8412ba101f21d5edb5e9 100644 --- a/modules/consensus/esbocs/dap_chain_cs_esbocs.c +++ b/modules/consensus/esbocs/dap_chain_cs_esbocs.c @@ -143,8 +143,7 @@ DAP_STATIC_INLINE uint16_t s_get_round_skip_timeout(dap_chain_esbocs_session_t * return PVT(a_session->esbocs)->round_attempt_timeout * 6 * PVT(a_session->esbocs)->round_attempts_max; } -int dap_chain_cs_esbocs_init() -{ +int dap_chain_cs_esbocs_init() { dap_stream_ch_chain_voting_init(); dap_chain_cs_add("esbocs", s_callback_new); dap_cli_server_cmd_add ("esbocs", s_cli_esbocs, "ESBOCS commands", @@ -374,7 +373,7 @@ static int s_callback_created(dap_chain_t *a_chain, dap_config_t *a_chain_net_cf l_esbocs_pvt->fee_coll_set = dap_chain_coins_to_balance(dap_config_get_item_str_default(a_chain_net_cfg, "esbocs", "set_collect_fee", "10.0")); const char *l_sign_cert_str = NULL; - if ((l_sign_cert_str = dap_config_get_item_str(a_chain_net_cfg, "esbocs", "blocks-sign-cert")) != NULL) { + if( (l_sign_cert_str = dap_config_get_item_str(a_chain_net_cfg, "esbocs", "blocks-sign-cert")) ) { dap_cert_t *l_sign_cert = dap_cert_find_by_name(l_sign_cert_str); if (l_sign_cert == NULL) { log_it(L_ERROR, "Can't load sign certificate, name \"%s\" is wrong", l_sign_cert_str); diff --git a/modules/mempool/dap_chain_mempool.c b/modules/mempool/dap_chain_mempool.c index be5d6ae3db2d0a7c1d165c7a33d6120c57bfb3c2..6f3f4470999f7f13f21ae34756aacc6f60bca684 100644 --- a/modules/mempool/dap_chain_mempool.c +++ b/modules/mempool/dap_chain_mempool.c @@ -1108,7 +1108,7 @@ static void enc_http_reply_encode_new(struct dap_http_simple *a_http_simple, dap if(a_http_delegate->response) { if(a_http_simple->reply) - free(a_http_simple->reply); + DAP_DELETE(a_http_simple->reply); size_t l_reply_size_max = dap_enc_code_out_size(a_http_delegate->key, a_http_delegate->response_size, diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c index 7635db083ab26ddfabfbea405b8e5f8aba5bc7d6..e64ece4e3fd3a972a82136fafb3cf897d9769cc3 100644 --- a/modules/net/dap_chain_net.c +++ b/modules/net/dap_chain_net.c @@ -338,21 +338,20 @@ int dap_chain_net_init() char * l_net_dir_str = dap_strdup_printf("%s/network", dap_config_path()); DIR * l_net_dir = opendir( l_net_dir_str); if ( l_net_dir ){ - struct dirent * l_dir_entry; + struct dirent * l_dir_entry = NULL; uint16_t l_acl_idx = 0; - while ( (l_dir_entry = readdir(l_net_dir) )!= NULL ){ + while ( (l_dir_entry = readdir(l_net_dir) ) ){ if (l_dir_entry->d_name[0]=='\0' || l_dir_entry->d_name[0]=='.') continue; // don't search in directories - char * l_full_path = dap_strdup_printf("%s/%s", l_net_dir_str, l_dir_entry->d_name); + char l_full_path[MAX_PATH + 1] = {0}; + dap_snprintf(l_full_path, sizeof(l_full_path), "%s/%s", l_net_dir_str, l_dir_entry->d_name); if(dap_dir_test(l_full_path)) { - DAP_DELETE(l_full_path); continue; } - DAP_DELETE(l_full_path); // search only ".cfg" files if(strlen(l_dir_entry->d_name) > 4) { // It has non zero name excluding file extension - if(strncmp(l_dir_entry->d_name + strlen(l_dir_entry->d_name) - 4, ".cfg", 4) != 0) { + if( strncmp(l_dir_entry->d_name + strlen(l_dir_entry->d_name) - 4, ".cfg", 4) ) { // its not .cfg file continue; } @@ -1547,8 +1546,7 @@ void dap_chain_net_delete( dap_chain_net_t * a_net ) * @brief * load network config settings */ -void dap_chain_net_load_all() -{ +void dap_chain_net_load_all() { dap_chain_net_t **l_net_list = NULL; uint16_t l_net_count = 0; int32_t l_ret = 0; @@ -1560,10 +1558,11 @@ void dap_chain_net_load_all() } for(uint16_t i = 0; i < l_net_count; i++){ - if((l_ret = s_net_load(l_net_list[i])) != 0){ + if((l_ret = s_net_load(l_net_list[i])) ){ log_it(L_ERROR, "Loading chains of net %s finished with (%d) error code.", l_net_list[i]->pub.name, l_ret); } } + DAP_DELETE(l_net_list); } dap_string_t* dap_cli_list_net() @@ -1709,7 +1708,8 @@ static bool s_chain_net_reload_ledger_cache_once(dap_chain_net_t *l_net) * @param a_type - dap_chain_type_t a_type [CHAIN_TYPE_TOKEN, CHAIN_TYPE_EMISSION, CHAIN_TYPE_TX] * @return uint16_t */ -static const char *s_chain_type_convert_to_string(dap_chain_type_t a_type) { +static const char *s_chain_type_convert_to_string(dap_chain_type_t a_type) +{ switch (a_type) { case CHAIN_TYPE_TOKEN: return ("token"); @@ -2255,11 +2255,11 @@ void s_main_timer_callback(void *a_arg) */ int s_net_init(const char * a_net_name, uint16_t a_acl_idx) { - dap_config_t *l_cfg=NULL; + dap_config_t *l_cfg = NULL; dap_string_t *l_cfg_path = dap_string_new("network/"); dap_string_append(l_cfg_path,a_net_name); - if( ( l_cfg = dap_config_open ( l_cfg_path->str ) ) == NULL ) { + if( !(l_cfg = dap_config_open(l_cfg_path->str)) ) { log_it(L_ERROR,"Can't open default network config"); dap_string_free(l_cfg_path,true); return -1; @@ -2739,11 +2739,11 @@ int s_net_load(dap_chain_net_t *a_net) { dap_chain_net_t *l_net = a_net; - dap_config_t *l_cfg=NULL; + dap_config_t *l_cfg = NULL; dap_string_t *l_cfg_path = dap_string_new("network/"); dap_string_append(l_cfg_path,a_net->pub.name); - if( ( l_cfg = dap_config_open ( l_cfg_path->str ) ) == NULL ) { + if( !( l_cfg = dap_config_open ( l_cfg_path->str ) ) ) { log_it(L_ERROR,"Can't open default network config"); dap_string_free(l_cfg_path,true); return -1; @@ -2766,9 +2766,9 @@ int s_net_load(dap_chain_net_t *a_net) while(l_chain){ l_chain->ledger = l_net->pub.ledger; dap_chain_ledger_set_fee(l_net->pub.ledger, uint256_0, c_dap_chain_addr_blank); - if (dap_chain_load_all(l_chain) == 0) + if (!dap_chain_load_all(l_chain)) { log_it (L_NOTICE, "Loaded chain files"); - else { + } else { dap_chain_save_all( l_chain ); log_it (L_NOTICE, "Initialized chain files"); } @@ -2891,8 +2891,14 @@ void dap_chain_net_deinit() } +/** + * @brief dap_chain_net_list + * @return NULL if error + */ dap_chain_net_t **dap_chain_net_list(uint16_t *a_size) { + if (!a_size) + return NULL; pthread_rwlock_rdlock(&s_net_items_rwlock); *a_size = HASH_COUNT(s_net_items); if(*a_size){ @@ -2902,11 +2908,11 @@ dap_chain_net_t **dap_chain_net_list(uint16_t *a_size) pthread_rwlock_unlock(&s_net_items_rwlock); return NULL; } - dap_chain_net_item_t *l_current_item, *l_tmp; + dap_chain_net_item_t *l_current_item = NULL, *l_tmp = NULL; int i = 0; HASH_ITER(hh, s_net_items, l_current_item, l_tmp) { l_net_list[i++] = l_current_item->chain_net; - if(i > *a_size) + if(i >= *a_size) break; } pthread_rwlock_unlock(&s_net_items_rwlock); diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index d80360984c70e3bd2b7ddfc73c3f6eeddbebef19..2efea8f10555d23f185df1d2410348449147ebb8 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -110,6 +110,7 @@ #define LOG_TAG "chain_node_cli_cmd" +static void s_dap_chain_net_purge(dap_chain_net_t * a_net); /** * @brief dap_chain_node_addr_t* dap_chain_node_addr_get_by_alias @@ -722,6 +723,30 @@ static int node_info_dump_with_reply(dap_chain_net_t * a_net, dap_chain_node_add return l_ret; } +/** + * @brief purge ledger, stake, decree, all chains and remove chain files + * @param a_net + */ +void s_dap_chain_net_purge(dap_chain_net_t * a_net) +{ + if (!a_net) + return; + dap_chain_t *l_chain = NULL; + dap_chain_ledger_purge(a_net->pub.ledger, false); + dap_chain_net_srv_stake_purge(a_net); + dap_chain_net_decree_purge(a_net); + DL_FOREACH(a_net->pub.chains, l_chain) { + if (l_chain->callback_purge) + l_chain->callback_purge(l_chain); + if (l_chain->callback_set_min_validators_count) + l_chain->callback_set_min_validators_count(l_chain, 0); + const char *l_chains_rm_path = dap_chain_get_path(l_chain); + dap_rm_rf(l_chains_rm_path); + dap_chain_ledger_set_fee(a_net->pub.ledger, uint256_0, c_dap_chain_addr_blank); + dap_chain_load_all(l_chain); + } +} + /** * @brief com_global_db * global_db command @@ -5889,7 +5914,7 @@ int cmd_gdb_export(int a_argc, char **a_argv, char **a_str_reply) json_object_object_add(jobj, "timestamp", json_object_new_int64((int64_t)l_store_obj[i].timestamp)); json_object_array_add(l_json_group, jobj); - DAP_FREE(l_value_enc_str); + DAP_DELETE(l_value_enc_str); } json_object_object_add(l_json_group_inner, "records", l_json_group); json_object_array_add(l_json, l_json_group_inner); @@ -6105,20 +6130,7 @@ int cmd_remove(int a_argc, char **a_argv, char ** a_str_reply) 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++) { - dap_chain_ledger_purge(l_net_list[i]->pub.ledger, false); - dap_chain_net_srv_stake_purge(l_net_list[i]); - dap_chain_net_decree_purge(l_net_list[i]); - dap_chain_t *l_chain = NULL; - DL_FOREACH(l_net_list[i]->pub.chains, l_chain) { - if (l_chain->callback_purge) - l_chain->callback_purge(l_chain); - if (l_chain->callback_set_min_validators_count) - l_chain->callback_set_min_validators_count(l_chain, 0); - const char *l_chains_rm_path = dap_chain_get_path(l_chain); - dap_rm_rf(l_chains_rm_path); - dap_chain_ledger_set_fee(l_net_list[i]->pub.ledger, uint256_0, c_dap_chain_addr_blank); - dap_chain_load_all(l_chain); - } + s_dap_chain_net_purge(l_net_list[i]); } if (!error) successful |= REMOVED_CHAINS; @@ -6130,20 +6142,7 @@ int cmd_remove(int a_argc, char **a_argv, char ** a_str_reply) } else { error |= NET_NOT_VALID; } - dap_chain_t *l_chain = NULL; - dap_chain_ledger_purge(l_net->pub.ledger, false); - dap_chain_net_srv_stake_purge(l_net); - dap_chain_net_decree_purge(l_net); - DL_FOREACH(l_net->pub.chains, l_chain) { - if (l_chain->callback_purge) - l_chain->callback_purge(l_chain); - if (l_chain->callback_set_min_validators_count) - l_chain->callback_set_min_validators_count(l_chain, 0); - const char *l_chains_rm_path = dap_chain_get_path(l_chain); - dap_rm_rf(l_chains_rm_path); - dap_chain_ledger_set_fee(l_net->pub.ledger, uint256_0, c_dap_chain_addr_blank); - dap_chain_load_all(l_chain); - } + s_dap_chain_net_purge(l_net); if (!error) successful |= REMOVED_CHAINS; @@ -6415,14 +6414,14 @@ static char **s_parse_items(const char *a_str, char a_delimiter, int *a_count, c s = l_temp_str; if (l_count_temp == 0) { - DAP_FREE(l_temp_str); + DAP_DELETE(l_temp_str); return NULL; } char **lines = DAP_CALLOC(l_count_temp, sizeof (void *)); if (!lines) { log_it(L_ERROR, "Memoru allocation error in s_parse_items"); - DAP_FREE(l_temp_str); + DAP_DELETE(l_temp_str); return NULL; } for (int i = 0; i < l_count_temp; i++) { @@ -6432,7 +6431,7 @@ static char **s_parse_items(const char *a_str, char a_delimiter, int *a_count, c s++; } - DAP_FREE(l_temp_str); + DAP_DELETE(l_temp_str); *a_count = l_count_temp; return lines; } @@ -6471,9 +6470,9 @@ static int s_get_key_from_file(const char *a_file, const char *a_mime, const cha /* free l_items_mime */ for (int i = 0; i < l_items_mime_count; i++) { - if (l_items_mime[i]) DAP_FREE(l_items_mime[i]); + if (l_items_mime[i]) DAP_DELETE(l_items_mime[i]); } - DAP_FREE(l_items_mime); + DAP_DELETE(l_items_mime); l_items_mime_count = 0; } if (l_flags_mime == 0) l_flags_mime = SIGNER_ALL_FLAGS; @@ -6624,29 +6623,28 @@ static int s_sign_file(const char *a_filename, dap_sign_signer_file_t a_flags, c dap_cert_t *l_cert = dap_cert_find_by_name(a_cert_name); if (!l_cert) { - DAP_FREE(l_buffer); + DAP_DELETE(l_buffer); return 0; } if (!dap_hash_fast(l_buffer, l_file_content_size, a_hash)) { - DAP_FREE(l_buffer); + DAP_DELETE(l_buffer); return 0; } size_t l_full_size_for_sign; uint8_t *l_data = s_concat_hash_and_mimetypes(a_hash, l_std_list, &l_full_size_for_sign); if (!l_data) { - DAP_FREE(l_buffer); + DAP_DELETE(l_buffer); return 0; } *a_signed = dap_sign_create(l_cert->enc_key, l_data, l_full_size_for_sign, 0); if (*a_signed == NULL) { - DAP_FREE(l_buffer); + DAP_DELETE(l_buffer); return 0; } - - DAP_FREE(l_buffer); + DAP_DELETE(l_buffer); return 1; } @@ -6702,7 +6700,7 @@ static uint8_t *s_concat_hash_and_mimetypes (dap_chain_hash_fast_t *a_chain_hash memcpy(l_s, a_chain_hash->raw, sizeof(a_chain_hash->raw)); l_s += sizeof (a_chain_hash->raw); memcpy(l_s, l_buf, l_len_meta_buf); - DAP_FREE(l_buf); + DAP_DELETE(l_buf); return l_fullbuf; } diff --git a/modules/net/dap_chain_node_cli_cmd_tx.c b/modules/net/dap_chain_node_cli_cmd_tx.c index e2c9cf73700c544bbff0f203ab6c5a741677c009..53678642b9bfef8e269602d5656291104411ba5c 100644 --- a/modules/net/dap_chain_node_cli_cmd_tx.c +++ b/modules/net/dap_chain_node_cli_cmd_tx.c @@ -77,7 +77,7 @@ static void s_dap_chain_tx_hash_processed_ht_free(dap_chain_tx_hash_processed_ht dap_chain_tx_hash_processed_ht_t *l_tmp, *l_current_hash; HASH_ITER(hh, *l_hash_processed, l_current_hash, l_tmp) { HASH_DEL(*l_hash_processed, l_current_hash); - DAP_FREE(l_current_hash); + DAP_DELETE(l_current_hash); } } diff --git a/modules/net/dap_chain_node_client.c b/modules/net/dap_chain_node_client.c index 3b2a56925986f93f236bed3509048e5a87449394..c80bc435c37a8fd5c67fe07f00a0aec60cce6466 100644 --- a/modules/net/dap_chain_node_client.c +++ b/modules/net/dap_chain_node_client.c @@ -94,9 +94,9 @@ uint32_t s_timer_update_states = 600; /** * @brief dap_chain_node_client_init - * @return + * @return always 0 */ -int dap_chain_node_client_init(void) +int dap_chain_node_client_init() { s_stream_ch_chain_debug_more = dap_config_get_item_bool_default(g_config, "stream_ch_chain", "debug_more", false); s_timer_update_states = dap_config_get_item_uint32_default(g_config, "node_client", "timer_update_states", s_timer_update_states); diff --git a/modules/net/include/dap_chain_node_client.h b/modules/net/include/dap_chain_node_client.h index ad428d19e236154abf6f9b0d9f5be74dde7827e8..08e298d3f5493cb630024282cac5cf71bc1b53ad 100644 --- a/modules/net/include/dap_chain_node_client.h +++ b/modules/net/include/dap_chain_node_client.h @@ -139,7 +139,7 @@ typedef struct dap_chain_node_client { #define DAP_CHAIN_NODE_CLIENT(a) (a ? (dap_chain_node_client_t *) (a)->_inheritor : NULL) -int dap_chain_node_client_init(void); +int dap_chain_node_client_init(); void dap_chain_node_client_deinit(void); diff --git a/modules/net/iputils/ping.c b/modules/net/iputils/ping.c index e634a606e8bde2c67697719a6d1295cbc4960a1d..f56b7c0da1458b7b177b9109f7d615407f46634d 100644 --- a/modules/net/iputils/ping.c +++ b/modules/net/iputils/ping.c @@ -369,7 +369,7 @@ static int ping_main(ping_handle_t *a_ping_handle, int argc, char **argv) a_ping_handle->ping_common.options |= F_STRICTSOURCE; - free(addr); + DAP_DELETE(addr); } else if(inet_pton(AF_INET, optarg, &a_ping_handle->source.sin_addr) > 0) { a_ping_handle->ping_common.options |= F_STRICTSOURCE; } else { diff --git a/modules/net/iputils/ping6_common.c b/modules/net/iputils/ping6_common.c index 3bb143fadd3c39f6bc58b146e380892f50e365aa..bc9355a51c2cbbacba55c60e824ed2640ee5857f 100644 --- a/modules/net/iputils/ping6_common.c +++ b/modules/net/iputils/ping6_common.c @@ -375,7 +375,7 @@ static int niquery_option_subject_addr_handler(int index, const char *arg) if(!p) continue; memcpy(p, (uint8_t *) ai->ai_addr + offset, ni_subject_len); - free(ni_subject); + DAP_DELETE(ni_subject); ni_subject = p; break; } @@ -483,23 +483,23 @@ static int niquery_option_subject_name_handler(int index, const char *name) if (fqdn < 0) buf[n] = 0; - free(ni_subject); + DAP_DELETE(ni_subject); ni_group = nigroup_buf; ni_subject = buf; ni_subject_len = n + (fqdn < 0); ni_group = nigroup_buf; - free(canonname); - free(idn); + DAP_DELETE(canonname); + DAP_DELETE(idn); return 0; oomexit: error(0, errno, "memory allocation failed"); errexit: - free(buf); - free(canonname); - free(idn); + DAP_DELETE(buf); + DAP_DELETE(canonname); + DAP_DELETE(idn); exit(1); } #else diff --git a/modules/net/iputils/tracepath.c b/modules/net/iputils/tracepath.c index 2dce76420ca7396496ba18068819f85011b0a0a7..dd106d7d9fd9d7398524644ccc29ec274fae4895 100755 --- a/modules/net/iputils/tracepath.c +++ b/modules/net/iputils/tracepath.c @@ -748,8 +748,8 @@ int tracepath_util(const char *addr, int *hops, int *time_usec) }; int ret = tracepath_main(argc, (char**) argv, &ctl); for(int i = 0; i < MAX_HOPS_DEFAULT; i++) { - free(ctl.his[i].host_namea); - free(ctl.his[i].host_nameb); + DAP_DELETE(ctl.his[i].host_namea); + DAP_DELETE(ctl.his[i].host_nameb); } if(ret >= 0) { diff --git a/modules/net/iputils/traceroute/traceroute.c b/modules/net/iputils/traceroute/traceroute.c index a0dbeb2e233478034ab0b0fb6caec1a7285f74ed..4917c4affa98b87d8b80878254a6a06452a7db41 100755 --- a/modules/net/iputils/traceroute/traceroute.c +++ b/modules/net/iputils/traceroute/traceroute.c @@ -302,10 +302,10 @@ static int init_ip_options(void) { return -1; } - free(gateways[i]); + DAP_DELETE(gateways[i]); } - free(gateways); + DAP_DELETE(gateways); gateways = NULL; if(af == AF_INET) { @@ -1752,7 +1752,7 @@ int traceroute_util(const char *addr, int *hops, int *time_usec) one_probe->final, one_probe->recv_ttl, one_probe->recv_time - one_probe->send_time, one_probe->err_str);*/ } - free(probes); + DAP_DELETE(probes); return (ret == 1) ? 0 : ret; } diff --git a/modules/net/srv/dap_chain_net_srv.c b/modules/net/srv/dap_chain_net_srv.c index 5c4843ada1f5e2e450b29fc1875c9bec5eb6ce19..e315d9ae799318d6b5a27fe59dadedfe2dd94296 100644 --- a/modules/net/srv/dap_chain_net_srv.c +++ b/modules/net/srv/dap_chain_net_srv.c @@ -61,10 +61,6 @@ #define LOG_TAG "chain_net_srv" -static size_t m_uid_count; -static dap_chain_net_srv_uid_t * m_uid; - - typedef struct service_list { dap_chain_net_srv_uid_t uid; dap_chain_net_srv_t * srv; @@ -78,7 +74,7 @@ static service_list_t *s_srv_list = NULL; static pthread_mutex_t s_srv_list_mutex = PTHREAD_MUTEX_INITIALIZER; static int s_cli_net_srv(int argc, char **argv, char **a_str_reply); static void s_load(const char * a_path); -static void s_load_all(void); +static void s_load_all(); static bool s_pay_verificator_callback(dap_ledger_t * a_ledger, dap_chain_tx_out_cond_t *a_cond, dap_chain_datum_tx_t *a_tx_in, bool a_owner); @@ -94,8 +90,6 @@ int dap_chain_net_srv_init() dap_chain_ledger_verificator_add(DAP_CHAIN_TX_OUT_COND_SUBTYPE_SRV_PAY, s_pay_verificator_callback, NULL); dap_chain_ledger_verificator_add(DAP_CHAIN_TX_OUT_COND_SUBTYPE_FEE, s_fee_verificator_callback, NULL); dap_stream_ch_chain_net_srv_init(); - m_uid = NULL; - m_uid_count = 0; dap_cli_server_cmd_add ("net_srv", s_cli_net_srv, "Network services managment", "net_srv -net <net_name> order find [-direction {sell | buy}] [-srv_uid <Service UID>] [-price_unit <price unit>]\n" @@ -126,19 +120,19 @@ int dap_chain_net_srv_init() /** * @brief s_load_all */ -void s_load_all(void) +void s_load_all() { char * l_net_dir_str = dap_strdup_printf("%s/service.d", dap_config_path()); DIR * l_net_dir = opendir( l_net_dir_str); - if ( l_net_dir ){ - struct dirent * l_dir_entry; + if ( l_net_dir ) { + struct dirent * l_dir_entry = NULL; while ( (l_dir_entry = readdir(l_net_dir) )!= NULL ){ if (l_dir_entry->d_name[0]=='\0' || l_dir_entry->d_name[0]=='.') continue; // don't search in directories - char * l_full_path = dap_strdup_printf("%s/%s", l_net_dir_str, l_dir_entry->d_name); + char l_full_path[MAX_PATH + 1] = {0}; + dap_snprintf(l_full_path, sizeof(l_full_path), "%s/%s", l_net_dir_str, l_dir_entry->d_name); if(dap_dir_test(l_full_path)) { - DAP_DELETE(l_full_path); continue; } // search only ".cfg" files @@ -154,7 +148,6 @@ void s_load_all(void) if ( l_dot_pos ) *l_dot_pos = '\0'; s_load(l_full_path ); - DAP_DELETE(l_full_path); } closedir(l_net_dir); } @@ -907,7 +900,7 @@ dap_chain_net_srv_t* dap_chain_net_srv_add(dap_chain_net_srv_uid_t a_uid, dap_chain_net_srv_uid_t l_uid = {.uint64 = a_uid.uint64 }; // Copy to let then compiler to pass args via registers not stack pthread_mutex_lock(&s_srv_list_mutex); HASH_FIND(hh, s_srv_list, &l_uid, sizeof(l_uid), l_sdata); - if(l_sdata == NULL) { + if(!l_sdata) { l_srv = DAP_NEW_Z(dap_chain_net_srv_t); if (!l_srv) { log_it(L_ERROR, "Memory allocation error in dap_chain_net_srv_add"); diff --git a/modules/net/srv/dap_chain_net_srv_geoip.c b/modules/net/srv/dap_chain_net_srv_geoip.c index ad6fa6542588cd5c59a7e64fd0ba39c837535fdf..df7a745b8ce6c6d45e827fec76f74e3cd8f266db 100644 --- a/modules/net/srv/dap_chain_net_srv_geoip.c +++ b/modules/net/srv/dap_chain_net_srv_geoip.c @@ -201,7 +201,7 @@ geoip_info_t *chain_net_geoip_get_ip_info_by_local_db(const char *a_ip_str, cons if (mmdb_get_value_str3(&result, "continent", "names", a_locale, l_ret->continent, sizeof(l_ret->continent))) { if (mmdb_get_value_str3(&result, "continent", "names", LOCALE_DEFAULT, l_ret->continent, sizeof(l_ret->continent))) { MMDB_close(&mmdb); - DAP_FREE(l_ret); + DAP_DELETE(l_ret); return NULL; } } @@ -209,21 +209,21 @@ geoip_info_t *chain_net_geoip_get_ip_info_by_local_db(const char *a_ip_str, cons if (mmdb_get_value_str3(&result, "country", "names", a_locale, l_ret->country_name, sizeof(l_ret->country_name))) { if (mmdb_get_value_str3(&result, "country", "names", LOCALE_DEFAULT, l_ret->country_name, sizeof(l_ret->country_name))) { MMDB_close(&mmdb); - DAP_FREE(l_ret); + DAP_DELETE(l_ret); return NULL; } } // all the country names http://download.geonames.org/export/dump/countryInfo.txt if (mmdb_get_value_str2(&result, "country", "iso_code", l_ret->country_code, sizeof(l_ret->country_code))) { MMDB_close(&mmdb); - DAP_FREE(l_ret); + DAP_DELETE(l_ret); return NULL; } // city /*if (mmdb_get_value_str3(&result, "city", "names", a_locale, l_ret->city_name, sizeof(l_ret->city_name))) { if (mmdb_get_value_str3(&result, "city", "names", LOCALE_DEFAULT, l_ret->city_name, sizeof(l_ret->city_name))) { MMDB_close(&mmdb); - DAP_FREE(l_ret); + DAP_DELETE(l_ret); return NULL; } }*/ @@ -231,19 +231,19 @@ geoip_info_t *chain_net_geoip_get_ip_info_by_local_db(const char *a_ip_str, cons //location if (mmdb_get_value_double2(&result, "location", "latitude", &l_ret->latitude)) { MMDB_close(&mmdb); - DAP_FREE(l_ret); + DAP_DELETE(l_ret); return NULL; } if (mmdb_get_value_double2(&result, "location", "longitude", &l_ret->longitude)) { MMDB_close(&mmdb); - DAP_FREE(l_ret); + DAP_DELETE(l_ret); return NULL; } // IP /*if (mmdb_get_value_str2(&result, "traits", "ip_address", l_ret->ip_str, sizeof(l_ret->ip_str))) { MMDB_close(&mmdb); - DAP_FREE(l_ret); + DAP_DELETE(l_ret); return NULL; }*/ int a = sizeof(l_ret->ip_str); diff --git a/modules/net/srv/dap_chain_net_srv_order.c b/modules/net/srv/dap_chain_net_srv_order.c index eacda3cf4f9bff2b54853fee217ff30c6bd3f312..2d7479b37a52b21cc68313cbfa31b3afde03cf79 100644 --- a/modules/net/srv/dap_chain_net_srv_order.c +++ b/modules/net/srv/dap_chain_net_srv_order.c @@ -109,9 +109,9 @@ static void s_srv_order_check_decree_sign_timer() { * @brief dap_chain_net_srv_order_init * @return */ -int dap_chain_net_srv_order_init(void) +int dap_chain_net_srv_order_init() { - uint16_t l_net_count; + uint16_t l_net_count = 0; dap_chain_net_t **l_net_list = dap_chain_net_list(&l_net_count); for (uint16_t i = 0; i < l_net_count; i++) { dap_chain_net_add_gdb_notify_callback(l_net_list[i], s_srv_order_callback_notify, l_net_list[i]); diff --git a/modules/net/srv/include/dap_chain_net_srv_order.h b/modules/net/srv/include/dap_chain_net_srv_order.h index 8aaed003363eee4eb69d0f6dacf64c46f5cec51c..7924373573c17055ad0df8e5617afe4fbda20a75 100644 --- a/modules/net/srv/include/dap_chain_net_srv_order.h +++ b/modules/net/srv/include/dap_chain_net_srv_order.h @@ -71,7 +71,7 @@ typedef struct dap_chain_net_srv_order } DAP_ALIGN_PACKED dap_chain_net_srv_order_t; // Init/deinit should be call only if private -int dap_chain_net_srv_order_init(void); +int dap_chain_net_srv_order_init(); void dap_chain_net_srv_order_deinit(void); size_t dap_chain_net_srv_order_get_size(dap_chain_net_srv_order_t *a_order); 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 b09e976a838d742deafaf717216e63736a551fb1..4f1659cfe68c17be758ae9938ac00f680b3b4409 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,12 +51,14 @@ 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; /** * @brief dap_stream_ch_vpn_init Init actions for VPN stream channel - * @param vpn_addr Zero if only client mode. Address if the node shares its local VPN - * @param vpn_mask Zero if only client mode. Mask if the node shares its local VPN * @return 0 if everything is okay, lesser then zero if errors */ int dap_chain_net_srv_stake_pos_delegate_init() @@ -102,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); } @@ -363,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); } @@ -1962,7 +1983,8 @@ static int s_cli_srv_stake(int a_argc, char **a_argv, char **a_str_reply) } bool dap_chain_net_srv_stake_get_fee_validators(dap_chain_net_t *a_net, - uint256_t *a_max_fee, uint256_t *a_average_fee, uint256_t *a_min_fee) { + uint256_t *a_max_fee, uint256_t *a_average_fee, uint256_t *a_min_fee) +{ if (!a_net) return false; char * l_gdb_group_str = dap_chain_net_srv_order_get_gdb_group(a_net); @@ -2050,7 +2072,8 @@ static void s_cache_data(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx, dap log_it(L_WARNING, "Stake service cache mismatch"); } -bool dap_chain_net_srv_stake_check_pkey_hash(dap_hash_fast_t *a_pkey_hash) { +bool dap_chain_net_srv_stake_check_pkey_hash(dap_hash_fast_t *a_pkey_hash) +{ dap_chain_net_srv_stake_item_t *l_stake, *l_tmp; HASH_ITER(hh, s_srv_stake->itemlist, l_stake, l_tmp) { if (dap_hash_fast_compare(&l_stake->signing_addr.data.hash_fast, a_pkey_hash)) diff --git a/modules/service/vpn/dap_chain_net_srv_vpn.c b/modules/service/vpn/dap_chain_net_srv_vpn.c index a50285aa9e9c427dc4d660605d86ec01cb0e225c..452e3627b697e7142e73807adff0ea57493472c1 100644 --- a/modules/service/vpn/dap_chain_net_srv_vpn.c +++ b/modules/service/vpn/dap_chain_net_srv_vpn.c @@ -1350,7 +1350,7 @@ static void send_pong_pkt(dap_stream_ch_t* a_ch) dap_stream_ch_pkt_write_unsafe(a_ch, 'd', pkt_out, pkt_out->header.op_data.data_size + sizeof(pkt_out->header)); dap_stream_ch_set_ready_to_write_unsafe(a_ch, true); - free(pkt_out); + DAP_DELETE(pkt_out); } /** diff --git a/modules/service/vpn/dap_chain_net_vpn_client_tun.c b/modules/service/vpn/dap_chain_net_vpn_client_tun.c index 6f77ec4eed63eb8a3b5e39f7db0505461520c873..8551e693254748b623426ab77a77bcc3b1f0b7c8 100644 --- a/modules/service/vpn/dap_chain_net_vpn_client_tun.c +++ b/modules/service/vpn/dap_chain_net_vpn_client_tun.c @@ -688,9 +688,9 @@ void ch_sf_tun_client_send(dap_chain_net_srv_ch_vpn_t * ch_sf, void * pkt_data, if (!pkt_out) { log_it(L_ERROR, "Memory allocation error in ch_sf_tun_client_send"); if(in_daddr_str) - free(in_daddr_str); + DAP_DELETE(in_daddr_str); if(in_saddr_str) - free(in_saddr_str); + DAP_DELETE(in_saddr_str); return; } pkt_out->header.op_code = VPN_PACKET_OP_CODE_PROBLEM; @@ -705,9 +705,9 @@ void ch_sf_tun_client_send(dap_chain_net_srv_ch_vpn_t * ch_sf, void * pkt_data, } if(in_daddr_str) - free(in_daddr_str); + DAP_DELETE(in_daddr_str); if(in_saddr_str) - free(in_saddr_str); + DAP_DELETE(in_saddr_str); } /** diff --git a/modules/service/xchange/dap_chain_net_srv_xchange.c b/modules/service/xchange/dap_chain_net_srv_xchange.c index c7173809ebf11fb40fea3d62509f168b0492ed92..8549ec44176c8cfdec54baa7adcacf983cb02650 100644 --- a/modules/service/xchange/dap_chain_net_srv_xchange.c +++ b/modules/service/xchange/dap_chain_net_srv_xchange.c @@ -74,8 +74,6 @@ static bool s_debug_more = true; /** * @brief dap_stream_ch_vpn_init Init actions for VPN stream channel - * @param vpn_addr Zero if only client mode. Address if the node shares its local VPN - * @param vpn_mask Zero if only client mode. Mask if the node shares its local VPN * @return 0 if everything is okay, lesser then zero if errors */ int dap_chain_net_srv_xchange_init() @@ -127,10 +125,9 @@ int dap_chain_net_srv_xchange_init() l_srv_callbacks.receipt_next_success = s_callback_receipt_next_success; l_srv_callbacks.decree = s_callback_decree; - dap_chain_net_srv_t* l_srv = dap_chain_net_srv_add(l_uid, "srv_xchange", &l_srv_callbacks); s_srv_xchange = DAP_NEW_Z(dap_chain_net_srv_xchange_t); - if (!s_srv_xchange) { + if (!s_srv_xchange || !l_srv) { log_it(L_ERROR, "Memory allocation error in dap_chain_net_srv_xchange_init"); return -1; } diff --git a/modules/type/blocks/dap_chain_cs_blocks.c b/modules/type/blocks/dap_chain_cs_blocks.c index 36a723f9e35034c6f741b7e2624591f95c417e80..34d5a7b2df6fb45b8ea97c7d88decb48b0fee163 100644 --- a/modules/type/blocks/dap_chain_cs_blocks.c +++ b/modules/type/blocks/dap_chain_cs_blocks.c @@ -189,7 +189,7 @@ int dap_chain_cs_blocks_init() "\t\t Take the whole commission\n\n" ); - if (dap_chain_block_cache_init() != 0){ + if( dap_chain_block_cache_init() ) { log_it(L_WARNING, "Can't init blocks cache"); } log_it(L_NOTICE,"Initialized blocks(m) chain type"); @@ -826,7 +826,7 @@ static dap_list_t * s_block_parse_str_list(const char * a_hash_str,size_t * a_ha if(dap_chain_hash_fast_from_hex_str(l_hashes_str, &l_hash_block)!=0) { log_it(L_WARNING,"Can't load hash %s",l_hashes_str); *a_hash_size = 0; - DAP_FREE(l_hashes_str_dup); + DAP_DELETE(l_hashes_str_dup); return NULL; } size_t l_block_size = 0; @@ -835,7 +835,7 @@ static dap_list_t * s_block_parse_str_list(const char * a_hash_str,size_t * a_ha { log_it(L_WARNING,"There aren't any block by this hash"); *a_hash_size = 0; - DAP_FREE(l_hashes_str_dup); + DAP_DELETE(l_hashes_str_dup); return NULL; } dap_chain_block_cache_t *l_block_cache = dap_chain_block_cs_cache_get_by_hash(l_blocks, &l_hash_block); @@ -849,7 +849,7 @@ static dap_list_t * s_block_parse_str_list(const char * a_hash_str,size_t * a_ha l_hashes_str = strtok_r(NULL, ",", &l_hashes_tmp_ptrs); l_hashes_pos++; } - DAP_FREE(l_hashes_str_dup); + DAP_DELETE(l_hashes_str_dup); return l_block_list; } @@ -877,13 +877,24 @@ static void s_callback_cs_blocks_purge(dap_chain_t *a_chain) { dap_chain_cs_blocks_t *l_blocks = DAP_CHAIN_CS_BLOCKS(a_chain); pthread_rwlock_wrlock(&PVT(l_blocks)->rwlock); - dap_chain_block_cache_t *l_block, *l_block_tmp; + dap_chain_block_cache_t *l_block = NULL, *l_block_tmp = NULL; HASH_ITER(hh, PVT(l_blocks)->blocks, l_block, l_block_tmp) { HASH_DEL(PVT(l_blocks)->blocks, l_block); DAP_DELETE(l_block->block); dap_chain_block_cache_delete(l_block); } pthread_rwlock_unlock(&PVT(l_blocks)->rwlock); + + dap_chain_block_datum_index_t *l_datum_index = NULL, *l_datum_index_tmp = NULL; + pthread_rwlock_wrlock(&PVT(l_blocks)->datums_rwlock); + HASH_ITER(hh, PVT(l_blocks)->datum_index, l_datum_index, l_datum_index_tmp) { + HASH_DEL(PVT(l_blocks)->datum_index, l_datum_index); + DAP_DELETE(l_datum_index); + l_datum_index = NULL; + } + pthread_rwlock_unlock(&PVT(l_blocks)->datums_rwlock); + PVT(l_blocks)->blocks_count = 0; + dap_chain_block_chunks_delete(PVT(l_blocks)->chunks); PVT(l_blocks)->block_cache_last = NULL; PVT(l_blocks)->block_cache_first = NULL; @@ -1595,7 +1606,8 @@ static size_t s_callback_add_datums(dap_chain_t *a_chain, dap_chain_datum_t **a_ * @param a_chain Chain object * @return size_t */ -static size_t s_callback_count_atom(dap_chain_t *a_chain){ +static size_t s_callback_count_atom(dap_chain_t *a_chain) +{ dap_chain_cs_blocks_t *l_blocks = DAP_CHAIN_CS_BLOCKS(a_chain); dap_chain_cs_blocks_pvt_t *l_blocks_pvt = PVT(l_blocks); return l_blocks_pvt->blocks_count; diff --git a/modules/type/dag/dap_chain_cs_dag.c b/modules/type/dag/dap_chain_cs_dag.c index f113ca6fa37658a60fa9ce8103bfb915bf2bf374..a3654e09796ec9912738f904b5cb935adc953cb7 100644 --- a/modules/type/dag/dap_chain_cs_dag.c +++ b/modules/type/dag/dap_chain_cs_dag.c @@ -144,9 +144,9 @@ static bool s_debug_more = false; /** * @brief dap_chain_cs_dag_init - * @return + * @return always 0 */ -int dap_chain_cs_dag_init(void) +int dap_chain_cs_dag_init() { srand((unsigned int) time(NULL)); dap_chain_cs_type_add( "dag", dap_chain_cs_dag_new ); diff --git a/modules/type/dag/include/dap_chain_cs_dag.h b/modules/type/dag/include/dap_chain_cs_dag.h index 84a7dd4ed54f424e3bf3dc649ee367978d9d4832..c0f894574d23710b7b49beaef47ff5891e80fb67 100644 --- a/modules/type/dag/include/dap_chain_cs_dag.h +++ b/modules/type/dag/include/dap_chain_cs_dag.h @@ -78,7 +78,7 @@ typedef struct dap_chain_cs_dag #define DAP_CHAIN_CS_DAG(a) ( (dap_chain_cs_dag_t *) (a)->_inheritor) -int dap_chain_cs_dag_init(void); +int dap_chain_cs_dag_init(); void dap_chain_cs_dag_deinit(void); int dap_chain_cs_dag_new(dap_chain_t * a_chain, dap_config_t * a_chain_cfg); diff --git a/modules/wallet/dap_chain_wallet.c b/modules/wallet/dap_chain_wallet.c index e00ffd40e8ce14b1e080bffd709e5e171ea5025d..0fbe7ec969797b45878e08b7dd3901985b1a359b 100644 --- a/modules/wallet/dap_chain_wallet.c +++ b/modules/wallet/dap_chain_wallet.c @@ -292,22 +292,21 @@ dap_chain_wallet_n_pass_t *l_prec; } /** - * @brief dap_chain_wallet_init - * @return + * @brief check wallet folders and try open wallets + * @return 0 if all ok */ -int dap_chain_wallet_init(void) +int dap_chain_wallet_init() { -char *c_wallets_path, l_fspec[MAX_PATH] = {0}; -DIR * l_dir; -struct dirent * l_dir_entry; -dap_chain_wallet_t *l_wallet; -size_t l_len; + char *c_wallets_path = NULL, l_fspec[MAX_PATH] = {0}; + DIR * l_dir = NULL; + struct dirent * l_dir_entry = NULL; + dap_chain_wallet_t *l_wallet = NULL; + size_t l_len = 0; if ( !(c_wallets_path = (char *) dap_chain_wallet_get_path(g_config)) ) /* No path to wallets - nothing to do */ - return 0; + return -1; - if ( !(l_dir = opendir(c_wallets_path)) ) /* Path is not exist ? Create the dir and exit */ - { + if ( !(l_dir = opendir(c_wallets_path)) ) { /* Path is not exist ? Create the dir and exit */ #ifdef _WIN32 mkdir(c_wallets_path); #else @@ -319,18 +318,15 @@ size_t l_len; /* * Load certificates from existing no-password-protected (!!!) wallets */ - while( (l_dir_entry = readdir(l_dir))) - { + while( (l_dir_entry = readdir(l_dir))) { #ifndef DAP_OS_WINDOWS if ( l_dir_entry->d_type != DT_REG ) /* Skip unrelated entries */ continue; #endif l_len = strlen(l_dir_entry->d_name); /* Check for *.dwallet */ - if ( (l_len > 8) && (strcmp(l_dir_entry->d_name + l_len - (sizeof(s_wallet_ext) - 1), s_wallet_ext) == 0) ) - { - int ret = snprintf(l_fspec, sizeof(l_fspec) - 1, "%s/%s", c_wallets_path, l_dir_entry->d_name); - if (ret < 0) + if ( l_len > 8 && !strcmp(l_dir_entry->d_name + l_len - (sizeof(s_wallet_ext) - 1), s_wallet_ext) ) { + if (snprintf(l_fspec, sizeof(l_fspec) - 1, "%s/%s", c_wallets_path, l_dir_entry->d_name) < 0) continue; if ( (l_wallet = dap_chain_wallet_open_file(l_fspec, NULL)) ) dap_chain_wallet_close(l_wallet); @@ -358,7 +354,7 @@ static char s_wallets_path[MAX_PATH]; const char* dap_chain_wallet_get_path(dap_config_t * a_config) { -char *l_cp; + char *l_cp = NULL; if (!a_config) a_config = g_config; if ( s_wallets_path[0] ) /* Is the path to the wallet's store has been defined ? */ @@ -366,7 +362,7 @@ char *l_cp; /* Retrieve Wallet's store path from config */ if ( !(l_cp = (char *) dap_config_get_item_str(a_config, "resources", "wallets_path")) ) - return log_it(L_WARNING, "No path to wallet's store has been defined"), s_wallets_path; + return log_it(L_WARNING, "No path to wallet's store has been defined"), l_cp; return strncpy(s_wallets_path, l_cp, sizeof(s_wallets_path) - 1 ); /* Make local copy , return it to caller */ diff --git a/modules/wallet/include/dap_chain_wallet.h b/modules/wallet/include/dap_chain_wallet.h index 8c7448389afae88207910ec8b74e58c868ee9da0..ba0218db51e9dfe8ff6bfd8bcc0b72af9f168730 100644 --- a/modules/wallet/include/dap_chain_wallet.h +++ b/modules/wallet/include/dap_chain_wallet.h @@ -46,7 +46,7 @@ typedef struct dap_chain_wallet{ } dap_chain_wallet_t; -int dap_chain_wallet_init(void); +int dap_chain_wallet_init(); void dap_chain_wallet_deinit(void); const char* dap_chain_wallet_get_path(dap_config_t * a_config);