From d0eeccc9ec0cbe1dffa3653e1c44c9528a41e22b 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 229373718..b9de286cc 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; }