diff --git a/modules/net/dap_chain_ledger.c b/modules/net/dap_chain_ledger.c index 2b6e49df66c572470ad1d2c1185fa581d01eb2fb..1175e39508913ef9da5a303c96b276dbc9f3737d 100644 --- a/modules/net/dap_chain_ledger.c +++ b/modules/net/dap_chain_ledger.c @@ -4705,7 +4705,7 @@ int dap_ledger_tx_add(dap_ledger_t *a_ledger, dap_chain_datum_tx_t *a_tx, dap_ha l_tx_item->cache_data.multichannel = l_multichannel; l_tx_item->ts_added = dap_nanotime_now(); pthread_rwlock_wrlock(&l_ledger_pvt->ledger_rwlock); - if (dap_chain_net_get_load_mode(a_ledger->net)) + if (dap_chain_net_get_load_mode(a_ledger->net) || dap_chain_net_get_state(a_ledger->net) == NET_STATE_SYNC_CHAINS) HASH_ADD(hh, l_ledger_pvt->ledger_items, tx_hash_fast, sizeof(dap_chain_hash_fast_t), l_tx_item); else HASH_ADD_INORDER(hh, l_ledger_pvt->ledger_items, tx_hash_fast, sizeof(dap_chain_hash_fast_t), diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c index 909692910a3e6492361c5a6db9db0c8d1d197723..4ba06647b8635c3beddbc5125ae6ab692884ab2c 100644 --- a/modules/net/dap_chain_net.c +++ b/modules/net/dap_chain_net.c @@ -677,6 +677,8 @@ static bool s_net_states_proc(void *a_arg) dap_chain_net_pvt_t *l_net_pvt = PVT(l_net); assert(l_net_pvt); if (l_net_pvt->state_target == NET_STATE_OFFLINE) { + if(l_net_pvt->state == NET_STATE_SYNC_CHAINS) + dap_leger_load_end(l_net->pub.ledger); l_net_pvt->state = NET_STATE_OFFLINE; } @@ -686,8 +688,11 @@ static bool s_net_states_proc(void *a_arg) log_it(L_NOTICE,"%s.state: NET_STATE_OFFLINE", l_net->pub.name); // delete all links if ( l_net_pvt->state_target != NET_STATE_OFFLINE ){ + dap_chain_net_state_t l_prev_state = l_net_pvt->state; l_net_pvt->state = NET_STATE_LINKS_PREPARE; l_repeat_after_exit = true; + if(l_prev_state == NET_STATE_SYNC_CHAINS) + dap_leger_load_end(l_net->pub.ledger); } l_net_pvt->last_sync = 0; } break; @@ -2588,10 +2593,13 @@ static void s_sync_timer_callback(void *a_arg) l_net_pvt->sync_context.cur_chain = l_net_pvt->sync_context.cur_chain->next; log_it(L_DEBUG, "[%s:%d] Go to next chain %p", __FUNCTION__, __LINE__, l_net_pvt->sync_context.cur_chain); if (!l_net_pvt->sync_context.cur_chain) { + dap_chain_net_state_t l_prev_state = l_net_pvt->state; if (l_net_pvt->sync_context.last_state == SYNC_STATE_SYNCED) { l_net_pvt->state = NET_STATE_ONLINE; l_net_pvt->sync_context.state = l_net_pvt->sync_context.last_state = SYNC_STATE_IDLE; s_net_states_proc(l_net); + if(l_prev_state == NET_STATE_SYNC_CHAINS) + dap_leger_load_end(l_net->pub.ledger); } else l_net_pvt->sync_context.state = l_net_pvt->sync_context.last_state = SYNC_STATE_WAITING; return; @@ -2968,6 +2976,8 @@ void dap_chain_net_set_state(dap_chain_net_t *l_net, dap_chain_net_state_t a_sta if(a_state == PVT(l_net)->state){ return; } + if(PVT(l_net)->state == NET_STATE_SYNC_CHAINS) + dap_leger_load_end(l_net->pub.ledger); PVT(l_net)->state = a_state; dap_proc_thread_callback_add(NULL, s_net_states_proc, l_net); }