@ -874,7 +874,7 @@ void node_conn_direct_close(struct NODE_CONN_DIRECT* h) {
}
}
h - > cb = NULL ; h - > cb_arg = NULL ;
h - > cb = NULL ; h - > cb_arg = NULL ;
if ( entry - > connect_timer ) { uasync_cancel_timeout ( entry - > ua , entry - > connect_timer ) ; entry - > connect_timer = NULL ; }
if ( entry - > connect_timer ) { uasync_cancel_timeout ( entry - > ua , entry - > connect_timer ) ; entry - > connect_timer = NULL ; }
if ( conn & & conn - > state ! = 2 & & ! entry - > timed_out ) {
if ( conn & & conn - > state ! = 2 & & ! entry - > timed_out & & conn - > links_up > 0 ) {
/* устанавливаем fin_wait, отправляем CLOSE, ставим таймер */
/* устанавливаем fin_wait, отправляем CLOSE, ставим таймер */
conn - > fin_wait = 1 ;
conn - > fin_wait = 1 ;
conn - > fin_wait_clear_cb = ncd_fin_wait_cancelled ;
conn - > fin_wait_clear_cb = ncd_fin_wait_cancelled ;
@ -903,8 +903,9 @@ void node_conn_direct_close(struct NODE_CONN_DIRECT* h) {
/* закрываем conn синхронно чтобы линки сразу ушли из socket->links_queue:
/* закрываем conn синхронно чтобы линки сразу ушли из socket->links_queue:
* и н а ч е в т о м ж е т и к е н о в ы й open т о г о ж е у з л а с о з д а с т д у б л ь - conn и к о л л и з и ю а д р е с о в .
* и н а ч е в т о м ж е т и к е н о в ы й open т о г о ж е у з л а с о з д а с т д у б л ь - conn и к о л л и з и ю а д р е с о в .
* u_free ( conn ) в с ё р а в н о о т л о ж е н ( phase 2 в etcp_connection_close ) , UAF н е т . */
* u_free ( conn ) в с ё р а в н о о т л о ж е н ( phase 2 в etcp_connection_close ) , UAF н е т . */
DEBUG_INFO ( DEBUG_CATEGORY_NCD , " [ncd] close: node=0x%016llx state=%d timed_out=%d cb_running=%d -> %s " ,
DEBUG_INFO ( DEBUG_CATEGORY_NCD , " [ncd] close: node=0x%016llx state=%d timed_out=%d cb_running=%d links_up=%d -> %s " ,
( unsigned long long ) node_id , conn - > state , entry - > timed_out , conn - > callbacks_running ,
( unsigned long long ) node_id , conn - > state , entry - > timed_out , conn - > callbacks_running ,
conn - > links_up ,
conn - > callbacks_running ? " deferred " : " sync " ) ;
conn - > callbacks_running ? " deferred " : " sync " ) ;
if ( conn - > callbacks_running ) uasync_call_soon ( entry - > ua , conn , ncd_deferred_close_conn ) ;
if ( conn - > callbacks_running ) uasync_call_soon ( entry - > ua , conn , ncd_deferred_close_conn ) ;
else etcp_connection_close ( conn ) ;
else etcp_connection_close ( conn ) ;