@@ -608,10 +608,24 @@ start_vrrp(data_t *prev_global_data)
608
608
/* Init & start the VRRP packet dispatcher */
609
609
thread_add_event (master , vrrp_dispatcher_init , NULL , 0 );
610
610
611
- if (!reload && global_data -> vrrp_startup_delay ) {
612
- vrrp_delayed_start_time = timer_add_long (time_now , global_data -> vrrp_startup_delay );
613
- thread_add_timer (master , delayed_start_clear_thread , NULL , global_data -> vrrp_startup_delay );
614
- log_message (LOG_INFO , "Delaying startup for %g seconds" , global_data -> vrrp_startup_delay / TIMER_HZ_DOUBLE );
611
+ if (global_data -> vrrp_startup_delay ) {
612
+ if (!reload ) {
613
+ vrrp_delayed_start_time = timer_add_long (time_now , global_data -> vrrp_startup_delay );
614
+ thread_add_timer (master , delayed_start_clear_thread , NULL , global_data -> vrrp_startup_delay );
615
+ log_message (LOG_INFO , "Delaying startup for %g seconds" , global_data -> vrrp_startup_delay / TIMER_HZ_DOUBLE );
616
+ } else if (vrrp_delayed_start_time .tv_sec ) {
617
+ if (time_now .tv_sec > vrrp_delayed_start_time .tv_sec ||
618
+ (time_now .tv_sec == vrrp_delayed_start_time .tv_sec &&
619
+ time_now .tv_usec >= vrrp_delayed_start_time .tv_usec ))
620
+ vrrp_delayed_start_time .tv_sec = 0 ;
621
+ else {
622
+ unsigned delay_left ;
623
+ delay_left = (vrrp_delayed_start_time .tv_sec - time_now .tv_sec ) * 1000000UL
624
+ + vrrp_delayed_start_time .tv_usec - time_now .tv_usec ;
625
+ thread_add_timer (master , delayed_start_clear_thread , NULL , delay_left );
626
+ log_message (LOG_INFO , "Delaying startup for a further %g seconds" , delay_left / TIMER_HZ_DOUBLE );
627
+ }
628
+ }
615
629
}
616
630
617
631
if (!reload && global_data -> disable_local_igmp )
@@ -979,6 +993,7 @@ register_vrrp_thread_addresses(void)
979
993
register_thread_address ("start_vrrp_termination_thread" , start_vrrp_termination_thread );
980
994
register_thread_address ("send_reload_advert_thread" , send_reload_advert_thread );
981
995
#endif
996
+ register_thread_address ("delayed_start_clear_thread" , delayed_start_clear_thread );
982
997
register_thread_address ("vrrp_shutdown_backstop_thread" , vrrp_shutdown_backstop_thread );
983
998
register_thread_address ("vrrp_shutdown_timer_thread" , vrrp_shutdown_timer_thread );
984
999
@@ -1181,6 +1196,5 @@ register_vrrp_parent_addresses(void)
1181
1196
register_thread_address ("vrrp_respawn_thread" , vrrp_respawn_thread );
1182
1197
register_thread_address ("delayed_restart_vrrp_child_thread" , delayed_restart_vrrp_child_thread );
1183
1198
#endif
1184
- register_thread_address ("delayed_start_clear_thread" , delayed_start_clear_thread );
1185
1199
}
1186
1200
#endif
0 commit comments