From c9de6f9a497d3f1124a549651a3afc03e49e4e26 Mon Sep 17 00:00:00 2001 From: "Dmitriy A. Gerasimov" <dmitriy.gerasimov@demlabs.net> Date: Sat, 28 Nov 2020 15:31:27 +0700 Subject: [PATCH] [*] fixed chains iterator --- CMakeLists.txt | 2 +- modules/channel/chain/dap_stream_ch_chain.c | 4 +-- modules/type/dag/dap_chain_cs_dag.c | 27 ++++++++++----------- 3 files changed, 16 insertions(+), 17 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 313b192a58..ad58dac6de 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,7 +2,7 @@ project(cellframe-sdk C) cmake_minimum_required(VERSION 2.8) set(CMAKE_C_STANDARD 11) -set(CELLFRAME_SDK_NATIVE_VERSION "2.6-66") +set(CELLFRAME_SDK_NATIVE_VERSION "2.6-67") add_definitions ("-DCELLFRAME_SDK_VERSION=\"${CELLFRAME_SDK_NATIVE_VERSION}\"") set(DAPSDK_MODULES "") diff --git a/modules/channel/chain/dap_stream_ch_chain.c b/modules/channel/chain/dap_stream_ch_chain.c index dafe084527..90029303b8 100644 --- a/modules/channel/chain/dap_stream_ch_chain.c +++ b/modules/channel/chain/dap_stream_ch_chain.c @@ -581,7 +581,7 @@ void s_stream_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg) l_ch_chain->request_hdr.cell_id.uint64, l_ch_chain->request.id_start, l_ch_chain->request.id_end ); if(l_ch_chain->state != CHAIN_STATE_IDLE) { - log_it(L_INFO, "Can't process SYNC_GLOBAL_DB request because not in idle state"); + log_it(L_WARNING, "Can't process SYNC_GLOBAL_DB request because not in idle state"); dap_stream_ch_chain_pkt_write_error(a_ch, l_chain_pkt->hdr.net_id, l_chain_pkt->hdr.chain_id, l_chain_pkt->hdr.cell_id, "ERROR_STATE_NOT_IN_IDLE"); @@ -590,7 +590,7 @@ void s_stream_ch_packet_in(dap_stream_ch_t* a_ch, void* a_arg) } // receive the latest global_db revision of the remote node -> go to send mode else { - log_it(L_ERROR, "Get DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNC_GLOBAL_DB session_id=%u bad request", + log_it(L_INFO, "Got DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNC_GLOBAL_DB request", a_ch->stream->session->id); dap_events_socket_remove_from_worker_unsafe(a_ch->stream->esocket, a_ch->stream_worker->worker); dap_proc_queue_add_callback_inter(a_ch->stream_worker->worker->proc_queue_input, s_sync_gdb_callback, a_ch); diff --git a/modules/type/dag/dap_chain_cs_dag.c b/modules/type/dag/dap_chain_cs_dag.c index 401898816c..539bfb9bf0 100644 --- a/modules/type/dag/dap_chain_cs_dag.c +++ b/modules/type/dag/dap_chain_cs_dag.c @@ -69,7 +69,6 @@ typedef struct dap_chain_cs_dag_pvt { pthread_rwlock_t events_rwlock; dap_chain_cs_dag_event_item_t * events; - dap_chain_cs_dag_event_item_t * events_tmp; // Tmp value for HASH_ITER dap_chain_cs_dag_event_item_t * tx_events; dap_chain_cs_dag_event_item_t * events_treshold; @@ -961,17 +960,18 @@ static dap_chain_atom_ptr_t s_chain_callback_atom_iter_get_first(dap_chain_atom_ return NULL; } dap_chain_cs_dag_t * l_dag = DAP_CHAIN_CS_DAG(a_atom_iter->chain); - dap_chain_cs_dag_pvt_t *l_dag_pvt = l_dag ? PVT(l_dag) : NULL; - l_dag_pvt->events_tmp = NULL; - dap_chain_cs_dag_event_item_t * l_cur_item = NULL; - HASH_ITER(hh,l_dag_pvt->events, l_cur_item, l_dag_pvt->events_tmp); - a_atom_iter->cur_item = l_cur_item; - a_atom_iter->cur = (dap_chain_cs_dag_event_t*) (l_cur_item ? l_cur_item->event : NULL); - a_atom_iter->cur_size = l_dag_pvt->events ? l_dag_pvt->events->event_size : 0; - -// a_atom_iter->cur = a_atom_iter->cur ? -// (dap_chain_cs_dag_event_t*) PVT (DAP_CHAIN_CS_DAG( a_atom_iter->chain) )->events->event : NULL; -// a_atom_iter->cur_item = PVT (DAP_CHAIN_CS_DAG( a_atom_iter->chain) )->events; + assert(l_dag); + dap_chain_cs_dag_pvt_t *l_dag_pvt = PVT(l_dag); + assert(l_dag_pvt); + a_atom_iter->cur_item = l_dag_pvt->events; + if ( a_atom_iter->cur_item ){ + a_atom_iter->cur = ((dap_chain_cs_dag_event_item_t*) a_atom_iter->cur_item)->event; + a_atom_iter->cur_size = ((dap_chain_cs_dag_event_item_t*) a_atom_iter->cur_item)->event_size; + }else{ + a_atom_iter->cur = NULL; + a_atom_iter->cur_size = 0; + } + if (a_ret_size) *a_ret_size = a_atom_iter->cur_size; return a_atom_iter->cur; @@ -1103,10 +1103,9 @@ static dap_chain_datum_tx_t* s_chain_callback_atom_iter_find_by_tx_hash(dap_chai static dap_chain_atom_ptr_t s_chain_callback_atom_iter_get_next( dap_chain_atom_iter_t * a_atom_iter,size_t * a_atom_size ) { if (a_atom_iter->cur ){ - dap_chain_cs_dag_pvt_t* l_dag_pvt = PVT(DAP_CHAIN_CS_DAG(a_atom_iter->chain)); + //dap_chain_cs_dag_pvt_t* l_dag_pvt = PVT(DAP_CHAIN_CS_DAG(a_atom_iter->chain)); dap_chain_cs_dag_event_item_t * l_event_item = (dap_chain_cs_dag_event_item_t*) a_atom_iter->cur_item; a_atom_iter->cur_item = l_event_item->hh.next; - HASH_ITER(hh,l_dag_pvt->events, a_atom_iter->cur_item, l_dag_pvt->events_tmp); l_event_item = (dap_chain_cs_dag_event_item_t*) a_atom_iter->cur_item; // if l_event_item=NULL then items are over a_atom_iter->cur = l_event_item ? l_event_item->event : NULL; -- GitLab