diff --git a/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c b/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c index cdb9704a1d69b410d60c4b9f6c9275647b965ce5..ce03090d8f371c7ec71786d669bc77aa5219bbb2 100644 --- a/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c +++ b/modules/channel/chain-net-srv/dap_stream_ch_chain_net_srv.c @@ -373,7 +373,6 @@ void dap_stream_ch_chain_net_srv_tx_cond_added_cb(UNUSED_ARG void *a_arg, UNUSED } pthread_mutex_lock(&l_net_srv->grace_mutex); HASH_FIND(hh, l_net_srv->grace_hash_tab, a_tx_hash, sizeof(dap_hash_fast_t), l_item); - pthread_mutex_unlock(&l_net_srv->grace_mutex); if (l_item){ log_it(L_INFO, "Found tx in ledger by notify. Finish grace."); // Stop timer @@ -389,6 +388,7 @@ void dap_stream_ch_chain_net_srv_tx_cond_added_cb(UNUSED_ARG void *a_arg, UNUSED DAP_DELETE(l_item->grace); DAP_DELETE(l_item); } + pthread_mutex_unlock(&l_net_srv->grace_mutex); } static bool s_service_start(dap_stream_ch_t *a_ch , dap_stream_ch_chain_net_srv_pkt_request_t *a_request, size_t a_request_size) diff --git a/modules/net/srv/dap_chain_net_srv_stream_session.c b/modules/net/srv/dap_chain_net_srv_stream_session.c index fd218ff8f24d27588c509eee4389c0b3c7fd40c6..fb6bbdb501f560d4f26f4f1f9422ae2d9c04547a 100644 --- a/modules/net/srv/dap_chain_net_srv_stream_session.c +++ b/modules/net/srv/dap_chain_net_srv_stream_session.c @@ -88,7 +88,7 @@ dap_chain_net_srv_usage_t* dap_chain_net_srv_usage_add (dap_chain_net_srv_stream l_ret->service = a_srv; pthread_rwlock_init(&l_ret->rwlock,NULL); a_srv_session->usage_active = l_ret; - log_it( L_NOTICE, "Added service %s:0x%016"DAP_UINT64_FORMAT_X" , usage id: %d", l_ret->net->pub.name, a_srv->uid.uint64, l_ret->id); + log_it( L_NOTICE, "Added service %s:0x%016"DAP_UINT64_FORMAT_X" , usage id: %u", l_ret->net->pub.name, a_srv->uid.uint64, l_ret->id); return l_ret; }else{ log_it( L_ERROR, "Some NULLs was in input"); @@ -107,6 +107,20 @@ void dap_chain_net_srv_usage_delete (dap_chain_net_srv_stream_session_t * a_srv_ if (!a_srv_session || !a_srv_session->usage_active) return; + dap_chain_net_srv_grace_usage_t *l_item = NULL; + pthread_mutex_lock(&a_srv_session->usage_active->service->grace_mutex); + HASH_FIND(hh, a_srv_session->usage_active->service->grace_hash_tab, &a_srv_session->usage_active->tx_cond_hash, sizeof(dap_hash_fast_t), l_item); + if (l_item){ + log_it(L_INFO, "Found tx in ledger by notify. Finish grace."); + // Stop timer + dap_timerfd_delete_mt(l_item->grace->timer->worker, l_item->grace->timer->esocket_uuid); + // finish grace + HASH_DEL(a_srv_session->usage_active->service->grace_hash_tab, l_item); + DAP_DELETE(l_item->grace); + DAP_DELETE(l_item); + } + pthread_mutex_unlock(&a_srv_session->usage_active->service->grace_mutex); + if ( a_srv_session->usage_active->receipt ) DAP_DEL_Z( a_srv_session->usage_active->receipt ); if ( a_srv_session->usage_active->receipt_next )