@@ -2969,17 +2969,20 @@ fd_quic_handle_crypto_frame( fd_quic_frame_ctx_t * context,
2969
2969
static int
2970
2970
fd_quic_conn_free_resources ( fd_quic_t * quic , fd_quic_conn_t * conn );
2971
2971
2972
- static void
2972
+ /* Returns new conn state */
2973
+ static uint
2973
2974
fd_quic_timeout_conn ( fd_quic_t * quic , fd_quic_conn_t * conn ) {
2975
+ quic -> metrics .conn_timeout_cnt ++ ;
2974
2976
if ( quic -> config .keep_timed_out ) {
2975
2977
fd_quic_state_t * state = fd_quic_get_state ( quic );
2976
2978
fd_quic_conn_free_resources ( quic , conn );
2977
2979
fd_quic_set_conn_state ( conn , FD_QUIC_CONN_STATE_TIMED_OUT );
2978
2980
fd_quic_svc_schedule ( state , conn , FD_QUIC_SVC_TIMEOUT );
2981
+ return FD_QUIC_CONN_STATE_TIMED_OUT ;
2979
2982
} else {
2980
2983
fd_quic_set_conn_state ( conn , FD_QUIC_CONN_STATE_DEAD );
2984
+ return FD_QUIC_CONN_STATE_DEAD ;
2981
2985
}
2982
- quic -> metrics .conn_timeout_cnt ++ ;
2983
2986
}
2984
2987
2985
2988
static int
@@ -2991,7 +2994,7 @@ fd_quic_svc_poll( fd_quic_t * quic,
2991
2994
conn -> state == FD_QUIC_CONN_STATE_TIMED_OUT ) ) {
2992
2995
/* connection shouldn't have been scheduled,
2993
2996
and is now removed, so just continue */
2994
- FD_LOG_ERR (( "Bad conn in schedule (svc_type=%u), state=%s" , conn -> svc_type , conn -> state == FD_QUIC_CONN_STATE_INVALID ? "INVALID" : "TIMED_OUT" ));
2997
+ FD_LOG_CRIT (( "Bad conn in schedule (svc_type=%u), state=%s" , conn -> svc_type , conn -> state == FD_QUIC_CONN_STATE_INVALID ? "INVALID" : "TIMED_OUT" ));
2995
2998
return 1 ;
2996
2999
}
2997
3000
@@ -3010,8 +3013,9 @@ fd_quic_svc_poll( fd_quic_t * quic,
3010
3013
conn -> server ?"SERVER" :"CLIENT" ,
3011
3014
(void * )conn , conn -> conn_idx , (double )fd_quic_ticks_to_us (conn -> idle_timeout_ticks ) / 1e3 )); )
3012
3015
3013
- fd_quic_timeout_conn ( quic , conn );
3014
- return 1 ;
3016
+ /* Handle timeout based on config. If left as TIMED_OUT rather than DEAD,
3017
+ don't bother servicing further */
3018
+ if ( fd_quic_timeout_conn ( quic , conn )== FD_QUIC_CONN_STATE_TIMED_OUT ) return 1 ;
3015
3019
}
3016
3020
} else if ( quic -> config .keep_alive & !!(conn -> let_die_ticks > now ) ) {
3017
3021
/* send PING */
0 commit comments