mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-05-02 14:43:23 +00:00
vrrpd: fix broken reads when reinitializing
When a VRRP router was shut down - either due to an administrative event, or its interface getting deleted, or some other reason - it was forgetting to cancel its read task. When it was started again, the read task was still around, and so it wasn't getting scheduled again with the new socket fd's. This caused our socket to queue ingress packets but never read them, resulting in the restarted router always electing itself to Master (since it wasn't listening to any other advertisements, even though the kernel was delivering them). The t_write cancellation call doesn't matter here, but I'm putting it in there because it doesn't hurt and this way I won't forget about it if it becomes necessary in the future. Signed-off-by: Quentin Young <qlyoung@cumulusnetworks.com>
This commit is contained in:
parent
18ca2e1ff4
commit
a90edf08e3
@ -1534,6 +1534,8 @@ static int vrrp_shutdown(struct vrrp_router *r)
|
||||
/* Cancel all timers */
|
||||
THREAD_OFF(r->t_adver_timer);
|
||||
THREAD_OFF(r->t_master_down_timer);
|
||||
THREAD_OFF(r->t_read);
|
||||
THREAD_OFF(r->t_write);
|
||||
|
||||
if (r->sock_rx > 0) {
|
||||
close(r->sock_rx);
|
||||
|
Loading…
Reference in New Issue
Block a user