diff --git a/modules/chain/dap_chain_ch.c b/modules/chain/dap_chain_ch.c index 61f65a8fc52308ba9ff44518d8bd7d28638ed3ed..47740336ed7fe8a24f92ef90bae21bb259b76bc0 100644 --- a/modules/chain/dap_chain_ch.c +++ b/modules/chain/dap_chain_ch.c @@ -399,6 +399,8 @@ static bool s_sync_out_gdb_proc_callback(void *a_arg) if (l_cur_size + sizeof(dap_global_db_pkt_old_t) + l_pkt->data_size >= DAP_CHAIN_PKT_EXPECT_SIZE) { l_context->enqueued_data_size += l_data_size; if (!l_go_wait && l_context->enqueued_data_size > DAP_EVENTS_SOCKET_BUF_SIZE / 2) { + if (!atomic_compare_exchange_strong(&l_context->state, &l_cur_state, DAP_CHAIN_CH_STATE_WAITING)) + goto context_delete; l_context->prev_state = l_cur_state; l_go_wait = true; } @@ -448,8 +450,7 @@ static bool s_sync_out_gdb_proc_callback(void *a_arg) } if (!l_go_wait) return true; - if (atomic_compare_exchange_strong(&l_context->state, &l_cur_state, DAP_CHAIN_CH_STATE_WAITING)) - return false; + return false; context_delete: dap_worker_exec_callback_on(l_context->worker->worker, s_legacy_sync_context_delete, l_context); return false; @@ -481,13 +482,8 @@ static bool s_gdb_in_pkt_proc_callback(void *a_arg) break; if (l_args->new && l_objs_count == 1) l_objs[0].flags |= DAP_GLOBAL_DB_RECORD_NEW; - if (l_success && dap_global_db_set_raw_sync(l_objs, l_objs_count)) { - const char *l_err_str = s_error_type_to_string(DAP_CHAIN_CH_ERROR_GLOBAL_DB_INTERNAL_NOT_SAVED); - dap_chain_ch_pkt_t *l_chain_pkt = dap_chain_ch_pkt_new(l_args->hdr.net_id, l_args->hdr.chain_id, l_args->hdr.cell_id, - l_err_str, strlen(l_err_str), DAP_CHAIN_CH_PKT_VERSION_LEGACY); - dap_stream_ch_pkt_write_mt(l_args->worker, l_args->uuid, DAP_CHAIN_CH_PKT_TYPE_ERROR, l_chain_pkt, dap_chain_ch_pkt_get_size(l_chain_pkt)); - DAP_DELETE(l_chain_pkt); - } + if (l_success) + dap_global_db_set_raw_sync(l_objs, l_objs_count); dap_store_obj_free(l_objs, l_objs_count); DAP_DELETE(l_args); return false; @@ -529,6 +525,8 @@ static bool s_sync_out_chains_proc_callback(void *a_arg) if (!l_hash_item) { l_context->enqueued_data_size += l_context->atom_iter->cur_size; if (l_context->enqueued_data_size > DAP_EVENTS_SOCKET_BUF_SIZE / 2) { + if (!atomic_compare_exchange_strong(&l_context->state, &l_cur_state, DAP_CHAIN_CH_STATE_WAITING)) + goto context_delete; l_context->prev_state = l_cur_state; l_go_wait = true; } @@ -584,8 +582,7 @@ static bool s_sync_out_chains_proc_callback(void *a_arg) } if (!l_go_wait) return true; - if (atomic_compare_exchange_strong(&l_context->state, &l_cur_state, DAP_CHAIN_CH_STATE_WAITING)) - return false; + return false; context_delete: dap_worker_exec_callback_on(l_context->worker->worker, s_legacy_sync_context_delete, l_context); return false; diff --git a/modules/consensus/esbocs/dap_chain_cs_esbocs.c b/modules/consensus/esbocs/dap_chain_cs_esbocs.c index 3e7b11d6709db8e473564ba428f048dd903e5768..e42cf50331d3620e5f0e1458a852f59dbd81c055 100644 --- a/modules/consensus/esbocs/dap_chain_cs_esbocs.c +++ b/modules/consensus/esbocs/dap_chain_cs_esbocs.c @@ -2945,7 +2945,7 @@ static int s_cli_esbocs(int a_argc, char **a_argv, void **a_str_reply) dap_cli_server_cmd_set_reply_text(a_str_reply, "Command 'min_validators_count' requires parameter -cert"); return -3; } - dap_cert_t *l_poa_cert = dap_cert_find_by_name(l_cert_str); + l_poa_cert = dap_cert_find_by_name(l_cert_str); if (!l_poa_cert) { dap_cli_server_cmd_set_reply_text(a_str_reply, "Specified certificate not found"); return -25; diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index c08edfcd8aa24327df6135655dd14aa96e4c9458..ec9ea01373890fb85a9f715fc5a8a3218da418d0 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -2326,88 +2326,6 @@ int dap_chain_node_cli_cmd_values_parse_net_chain(int *a_arg_index, int a_argc, return 0; } -/** - * @brief dap_chain_node_cli_cmd_values_parse_net_chain_json - * @param argc - * @param argv - * @param a_chain - * @param a_net - * @return - */ -int dap_chain_node_cli_cmd_values_parse_net_chain_json(int *a_arg_index, int a_argc, char **a_argv, - dap_chain_t **a_chain, dap_chain_net_t **a_net) -{ - const char * l_chain_str = NULL; - const char * l_net_str = NULL; - - // Net name - if(a_net) - dap_cli_server_cmd_find_option_val(a_argv, *a_arg_index, a_argc, "-net", &l_net_str); - else - return -DAP_CHAIN_NODE_CLI_COM_PARSE_NET_NET_STR_ERR; - - // Select network - if(!l_net_str) { - dap_json_rpc_error_add(DAP_CHAIN_NODE_CLI_COM_PARSE_NET_NET_PARAM_ERR, "%s requires parameter '-net'", a_argv[0]); - return -DAP_CHAIN_NODE_CLI_COM_PARSE_NET_NET_PARAM_ERR; - } - - if((*a_net = dap_chain_net_by_name(l_net_str)) == NULL) { // Can't find such network - dap_json_rpc_error_add(DAP_CHAIN_NODE_CLI_COM_PARSE_NET_NOT_FOUND_ERR, "%s can't find network \"%s\"", a_argv[0], l_net_str); - char l_str_to_reply_chain[500] = {0}; - char *l_str_to_reply = NULL; - sprintf(l_str_to_reply_chain, "%s can't find network \"%s\"\n", a_argv[0], l_net_str); - l_str_to_reply = dap_strcat2(l_str_to_reply,l_str_to_reply_chain); - dap_string_t* l_net_str = dap_cli_list_net(); - l_str_to_reply = dap_strcat2(l_str_to_reply,l_net_str->str); - dap_json_rpc_error_add(DAP_CHAIN_NODE_CLI_COM_PARSE_NET_NOT_FOUND_ERR, l_str_to_reply); - DAP_DELETE(l_str_to_reply); - dap_string_free(l_net_str, true); - return -DAP_CHAIN_NODE_CLI_COM_PARSE_NET_NOT_FOUND_ERR; - } - - // Chain name - if(a_chain) { - dap_cli_server_cmd_find_option_val(a_argv, *a_arg_index, a_argc, "-chain", &l_chain_str); - - // Select chain - if(l_chain_str) { - if ((*a_chain = dap_chain_net_get_chain_by_name(*a_net, l_chain_str)) == NULL) { // Can't find such chain - char l_str_to_reply_chain[500] = {0}; - char *l_str_to_reply = NULL; - sprintf(l_str_to_reply_chain, "%s requires parameter '-chain' to be valid chain name in chain net %s. Current chain %s is not valid\n", - a_argv[0], l_net_str, l_chain_str); - l_str_to_reply = dap_strcat2(l_str_to_reply,l_str_to_reply_chain); - dap_chain_t * l_chain; - dap_chain_net_t * l_chain_net = *a_net; - l_str_to_reply = dap_strcat2(l_str_to_reply,"\nAvailable chains:\n"); - DL_FOREACH(l_chain_net->pub.chains, l_chain) { - l_str_to_reply = dap_strcat2(l_str_to_reply,"\t"); - l_str_to_reply = dap_strcat2(l_str_to_reply,l_chain->name); - l_str_to_reply = dap_strcat2(l_str_to_reply,"\n"); - } - dap_json_rpc_error_add(DAP_CHAIN_NODE_CLI_COM_PARSE_NET_CHAIN_PARAM_ERR, l_str_to_reply); - DAP_DELETE(l_str_to_reply); - return -DAP_CHAIN_NODE_CLI_COM_PARSE_NET_CHAIN_PARAM_ERR; - } - } - else if ( !strcmp(a_argv[0], "token_decl") - || !strcmp(a_argv[0], "token_decl_sign")) { - if ( (*a_chain = dap_chain_net_get_default_chain_by_chain_type(*a_net, CHAIN_TYPE_TOKEN)) == NULL ) - { - dap_json_rpc_error_add(DAP_CHAIN_NODE_CLI_COM_PARSE_NET_CHAIN_PARAM_ERR, "%s requires parameter '-chain' or set default datum type in chain configuration file", - a_argv[0]); - return -DAP_CHAIN_NODE_CLI_COM_PARSE_NET_CHAIN_PARAM_ERR; - } - } else { - dap_json_rpc_error_add(DAP_CHAIN_NODE_CLI_COM_PARSE_NET_CHAIN_PARAM_ERR, "%s requires parameter '-chain'", a_argv[0]); - return -DAP_CHAIN_NODE_CLI_COM_PARSE_NET_CHAIN_PARAM_ERR; - } - } - return 0; -} - - /** * @brief * sign data (datum_token) by certificates (1 or more) diff --git a/modules/net/include/dap_chain_node_cli_cmd.h b/modules/net/include/dap_chain_node_cli_cmd.h index 0ef481d581c1f56e4daf36fff555ae4bfc5ddd45..f3a2400fa28d45ae7b0f230ffe25f95bb8a336ae 100644 --- a/modules/net/include/dap_chain_node_cli_cmd.h +++ b/modules/net/include/dap_chain_node_cli_cmd.h @@ -40,9 +40,6 @@ int dap_chain_node_cli_cmd_values_parse_net_chain_for_json(int *a_arg_index, int int dap_chain_node_cli_cmd_values_parse_net_chain(int *a_arg_index, int a_argc, char **a_argv, void **a_str_reply, dap_chain_t ** a_chain, dap_chain_net_t ** a_net, dap_chain_type_t a_default_chain_type); -int dap_chain_node_cli_cmd_values_parse_net_chain_json(int *a_arg_index, int a_argc, char **a_argv, - dap_chain_t **a_chain, dap_chain_net_t **a_net); - typedef enum s_com_parse_net_chain_err{ DAP_CHAIN_NODE_CLI_COM_PARSE_NET_NET_STR_ERR = 100, DAP_CHAIN_NODE_CLI_COM_PARSE_NET_NET_PARAM_ERR, diff --git a/modules/type/blocks/dap_chain_cs_blocks.c b/modules/type/blocks/dap_chain_cs_blocks.c index 87dd7d6323c009ff63048b2ea743e2d1cd530ba2..b380ef3e09fd42c26d24808feaaf24e748f795bf 100644 --- a/modules/type/blocks/dap_chain_cs_blocks.c +++ b/modules/type/blocks/dap_chain_cs_blocks.c @@ -568,7 +568,7 @@ static int s_cli_blocks(int a_argc, char ** a_argv, void **a_str_reply) dap_chain_net_t * l_net = NULL; // Parse default values - if(dap_chain_node_cli_cmd_values_parse_net_chain_json(&arg_index, a_argc, a_argv, &l_chain, &l_net) < 0) + if (dap_chain_node_cli_cmd_values_parse_net_chain_for_json(&arg_index, a_argc, a_argv, &l_chain, &l_net, CHAIN_TYPE_TX)) return -DAP_CHAIN_NODE_CLI_COM_BLOCK_PARAM_ERR; const char *l_chain_type = dap_chain_get_cs_type(l_chain);