mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-06 00:41:20 +00:00
zebra: label manager race condition fix
This fix covers the case where two or more events are processed but only one becoming effective. E.g. when mixing a synchronous label request from a LDP deamon and an asynchronous request from a BGP daemon it could happen to the BGP having the label chunk, but the LDP stuck waiting for the response. Given e.g. ldpd <--------> (sync label request) Zebra (label proxy) <--> Zebra (shared label manager) bgpd <--------> (async label request) Sequence: LDP label request -----> Zebra (label proxy FW) ----> Zebra (LM) BGP label request -----> Zebra (label proxy FW) ----> Zebra (LM) <---- Zebra (LM) RP LDP <---- Zebra (LM) RP BGP Signed-off-by: F. Aragon <paco@voltanet.io>
This commit is contained in:
parent
5eec4615a2
commit
98e9ab8b31
@ -156,11 +156,9 @@ static int lm_zclient_read(struct thread *t)
|
||||
/* read response and send it back */
|
||||
ret = relay_response_back();
|
||||
|
||||
/* on error, schedule another read */
|
||||
if (ret == -1)
|
||||
if (!zclient->t_read)
|
||||
thread_add_read(zclient->master, lm_zclient_read, NULL,
|
||||
zclient->sock, &zclient->t_read);
|
||||
/* re-arm read */
|
||||
thread_add_read(zclient->master, lm_zclient_read, NULL,
|
||||
zclient->sock, &zclient->t_read);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user