From 0b81b2bbd7dc50a786b3cc56dc31b150f3948098 Mon Sep 17 00:00:00 2001 From: Divakar D Date: Thu, 23 Mar 2017 12:06:39 +0530 Subject: [PATCH] Increment Nexthop ref count atomically Right now, the NH's refcount is not incremented atomically as reference to NH is always taken from a single thread in nelink context. This is becuase Routes, Labels, and other NH's access an NH only when Agent performs config changes. But with data path mac learning in place because of PBB, reference to NH, esp L2 Mutlicast NH, happens from multiple threads leading to requirement incrementing it atomically. Not doing it causes the ref count to go bad for that particular NH and results in double free of NH. Change-Id: I0afa517b56eeac0371670ee76241e392be762f20 closes-bug: #1672293 closes-bug: #1672373 closes-bug: #1673663 --- dp-core/vr_nexthop.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dp-core/vr_nexthop.c b/dp-core/vr_nexthop.c index a705fc652..1435c7d94 100644 --- a/dp-core/vr_nexthop.c +++ b/dp-core/vr_nexthop.c @@ -52,7 +52,7 @@ vrouter_get_nexthop(unsigned int rid, unsigned int index) router = vrouter_get(rid); nh = __vrouter_get_nexthop(router, index); if (nh) - nh->nh_users++; + (void)__sync_add_and_fetch(&nh->nh_users, 1); return nh; }