From 9900fb6ecc2534806d769aaf7c95915b2398d122 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 7114c83b1..928d41c0f 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; }