bgpd: do not account twice references to rule context

When rule add transaction is sent from bgpd to zebra, the reference
context must not be incremented while the confirmation message of
install has not been sent back; unless if the transaction failed to be
sent.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
This commit is contained in:
Philippe Guibert 2018-05-18 16:14:46 +02:00
parent 1ef3c51f94
commit b5c4010508

View file

@ -2564,6 +2564,7 @@ void bgp_send_pbr_iptable(struct bgp_pbr_action *pba,
bool install)
{
struct stream *s;
int ret = 0;
if (pbm->install_iptable_in_progress)
return;
@ -2580,9 +2581,12 @@ void bgp_send_pbr_iptable(struct bgp_pbr_action *pba,
bgp_encode_pbr_iptable_match(s, pba, pbm);
stream_putw_at(s, 0, stream_get_endp(s));
if (!zclient_send_message(zclient) && install) {
pbm->install_iptable_in_progress = true;
pba->refcnt++;
ret = zclient_send_message(zclient);
if (install) {
if (ret)
pba->refcnt++;
else
pbm->install_iptable_in_progress = true;
}
}