diff --git a/crypto/src/dap_sign.c b/crypto/src/dap_sign.c index 062874889b71d28ba7cea0455c81771b8cf4e516..81633980a97f581bd385ad976c462cdd35d69e0a 100755 --- a/crypto/src/dap_sign.c +++ b/crypto/src/dap_sign.c @@ -213,6 +213,7 @@ int dap_sign_create_output(dap_enc_key_t *a_key, const void * a_data, const size dap_sign_t * dap_sign_create(dap_enc_key_t *a_key, const void * a_data, const size_t a_data_size, size_t a_output_wish_size) { + dap_return_val_if_pass(!a_key, NULL); const void * l_sign_data; size_t l_sign_data_size; diff --git a/global-db/dap_global_db_driver_mdbx.c b/global-db/dap_global_db_driver_mdbx.c index af54feb3ea55c8bceeb5f90bd745f578effc822b..abe69741743f4420376e72654605901f9c5ee1a2 100644 --- a/global-db/dap_global_db_driver_mdbx.c +++ b/global-db/dap_global_db_driver_mdbx.c @@ -1069,8 +1069,9 @@ static int s_db_mdbx_apply_store_obj_with_txn(dap_store_obj_t *a_store_obj, MDBX DAP_DELETE(l_record); } else { /* Delete record */ + dap_global_db_driver_hash_t l_driver_key = {}; if (a_store_obj->crc && a_store_obj->timestamp) { - dap_global_db_driver_hash_t l_driver_key = dap_global_db_driver_hash_get(a_store_obj); + l_driver_key = dap_global_db_driver_hash_get(a_store_obj); l_key.iov_base = &l_driver_key; l_key.iov_len = sizeof(l_driver_key); rc = MDBX_SUCCESS; diff --git a/net/link_manager/dap_link_manager.c b/net/link_manager/dap_link_manager.c index 80b5b9a59abc7348c898a96bfd2d592e629a856f..60db0a59483ec2de395630b2e3f217609aae200f 100644 --- a/net/link_manager/dap_link_manager.c +++ b/net/link_manager/dap_link_manager.c @@ -66,7 +66,7 @@ static void s_client_connect(dap_link_t *a_link, void *a_callback_arg); static void s_client_connected_callback(dap_client_t *a_client, void *a_arg); static void s_client_error_callback(dap_client_t *a_client, void *a_arg); static void s_accounting_uplink_in_net(dap_link_t *a_link, dap_managed_net_t *a_net); -static void s_link_delete(dap_link_t *a_link, bool a_force, bool a_client_preserve); +static void s_link_delete(dap_link_t **a_link, bool a_force, bool a_client_preserve); static void s_link_delete_all(bool a_force); static void s_links_wake_up(dap_link_manager_t *a_link_manager); static void s_links_request(dap_link_manager_t *a_link_manager); @@ -240,7 +240,7 @@ void dap_link_manager_deinit() dap_link_t *l_link = NULL, *l_link_tmp; pthread_rwlock_wrlock(&s_link_manager->links_lock); HASH_ITER(hh, s_link_manager->links, l_link, l_link_tmp) - s_link_delete(l_link, true, false); + s_link_delete(&l_link, true, false); pthread_rwlock_unlock(&s_link_manager->links_lock); dap_list_t *it = NULL, *tmp; DL_FOREACH_SAFE(s_link_manager->nets, it, tmp) @@ -419,7 +419,7 @@ void dap_link_manager_set_net_condition(uint64_t a_net_id, bool a_new_condition) if (l_net_it->data == l_net) { l_link_it->uplink.associated_nets = dap_list_delete_link(l_link_it->uplink.associated_nets, l_net_it); if (!l_link_it->uplink.associated_nets) - s_link_delete(l_link_it, false, false); + s_link_delete(&l_link_it, false, false); break; } } @@ -529,10 +529,11 @@ void s_link_drop(dap_link_t *a_link, bool a_disconnected) } } if (!a_link->active_clusters && !a_link->uplink.associated_nets && !a_link->static_clusters) { - s_link_delete(a_link, false, false); - } else + s_link_delete(&a_link, false, false); + } else dap_client_go_stage(a_link->uplink.client, STAGE_BEGIN, NULL); - a_link->uplink.attempts_count = 0; + if (a_link) + a_link->uplink.attempts_count = 0; } else if (a_link->link_manager->callbacks.error) {// TODO make different error codes for (dap_list_t *it = a_link->uplink.associated_nets; it; it = it->next) { // if dynamic link call callback @@ -541,7 +542,7 @@ void s_link_drop(dap_link_t *a_link, bool a_disconnected) } if (a_link->uplink.state == LINK_STATE_ESTABLISHED) { a_link->stream_is_destroyed = true; - s_link_delete(a_link, false, true); + s_link_delete(&a_link, false, true); } else if (a_link->active_clusters) { dap_client_go_stage(a_link->uplink.client, STAGE_BEGIN, NULL); a_link->uplink.state = LINK_STATE_DISCONNECTED; @@ -589,38 +590,39 @@ void s_client_error_callback(dap_client_t *a_client, void *a_arg) * @param a_link - link to delet * @param a_force - only del dynamic, if true - all links types memory free */ -void s_link_delete(dap_link_t *a_link, bool a_force, bool a_client_preserve) +void s_link_delete(dap_link_t **a_link, bool a_force, bool a_client_preserve) { // sanity check - dap_return_if_pass(!a_link); + dap_return_if_pass(!a_link || !*a_link); + dap_link_t *l_link = *a_link; // func work debug_if(s_debug_more, L_DEBUG, "%seleting link %s node " NODE_ADDR_FP_STR "", a_force ? "Force d" : "D", - a_link->is_uplink || !a_link->active_clusters ? "to" : "from", NODE_ADDR_FP_ARGS_S(a_link->addr)); + l_link->is_uplink || !l_link->active_clusters ? "to" : "from", NODE_ADDR_FP_ARGS_S(l_link->addr)); - if (a_link->active_clusters) - dap_cluster_link_delete_from_all(a_link->active_clusters, &a_link->addr); - assert(a_link->active_clusters == NULL); + if (l_link->active_clusters) + dap_cluster_link_delete_from_all(l_link->active_clusters, &l_link->addr); + assert(l_link->active_clusters == NULL); - bool l_link_preserve = (a_client_preserve || a_link->static_clusters) && !a_force; - if (!a_link->stream_is_destroyed || !l_link_preserve) { + bool l_link_preserve = (a_client_preserve || l_link->static_clusters) && !a_force; + if (!l_link->stream_is_destroyed || !l_link_preserve) { // Drop uplink dap_events_socket_uuid_t l_client_uuid = 0; - if (a_link->uplink.client) { - l_client_uuid = a_link->uplink.es_uuid; - if (a_link->uplink.associated_nets) { - dap_list_free(a_link->uplink.associated_nets); - a_link->uplink.associated_nets = NULL; + if (l_link->uplink.client) { + l_client_uuid = l_link->uplink.es_uuid; + if (l_link->uplink.associated_nets) { + dap_list_free(l_link->uplink.associated_nets); + l_link->uplink.associated_nets = NULL; } if (l_link_preserve) { - if (a_link->uplink.state != LINK_STATE_DISCONNECTED) { - dap_client_go_stage(a_link->uplink.client, STAGE_BEGIN, NULL); - a_link->uplink.state = LINK_STATE_DISCONNECTED; + if (l_link->uplink.state != LINK_STATE_DISCONNECTED) { + dap_client_go_stage(l_link->uplink.client, STAGE_BEGIN, NULL); + l_link->uplink.state = LINK_STATE_DISCONNECTED; } } else - dap_client_delete_mt(a_link->uplink.client); + dap_client_delete_mt(l_link->uplink.client); } // Drop downlinks if any - dap_list_t *l_connections_for_addr = dap_stream_find_all_by_addr(&a_link->addr); + dap_list_t *l_connections_for_addr = dap_stream_find_all_by_addr(&l_link->addr); for (dap_list_t *it = l_connections_for_addr; it; it = it->next) { dap_events_socket_uuid_ctrl_t *l_uuid_ctrl = it->data; if (l_uuid_ctrl->uuid != l_client_uuid) @@ -630,9 +632,9 @@ void s_link_delete(dap_link_t *a_link, bool a_force, bool a_client_preserve) } if (l_link_preserve) return; - dap_list_free(a_link->static_clusters); - HASH_DEL(s_link_manager->links, a_link); - DAP_DELETE(a_link); + dap_list_free(l_link->static_clusters); + HASH_DEL(s_link_manager->links, l_link); + DAP_DEL_Z(*a_link); if (s_debug_more) s_link_manager_print_links_info(s_link_manager); } @@ -1057,7 +1059,7 @@ static bool s_stream_delete_callback(void *a_arg) l_link->stream_is_destroyed = true; dap_cluster_link_delete_from_all(l_link->active_clusters, l_node_addr); if (!l_link->uplink.client) - s_link_delete(l_link, false, false); + s_link_delete(&l_link, false, false); pthread_rwlock_unlock(&s_link_manager->links_lock); return false; } @@ -1124,7 +1126,7 @@ static bool s_link_accounting_callback(void *a_arg) l_link->uplink.associated_nets = dap_list_remove(l_link->uplink.associated_nets, l_net); l_net->uplinks--; if (l_link->uplink.client && !l_link->uplink.associated_nets && !l_link->static_clusters) - s_link_delete(l_link, false, false); + s_link_delete(&l_link, false, false); } pthread_rwlock_unlock(&s_link_manager->links_lock); DAP_DELETE(l_args); @@ -1223,7 +1225,7 @@ void dap_link_manager_remove_static_links_cluster(dap_cluster_member_t *a_member } l_link->static_clusters = dap_list_remove(l_link->static_clusters, l_cluster); if (!l_link->static_clusters && !l_link->active_clusters) - s_link_delete(l_link, false, true); + s_link_delete(&l_link, false, true); pthread_rwlock_unlock(&s_link_manager->links_lock); s_debug_cluster_adding_removing(true, false, l_cluster, l_node_addr); }