From 0cfe6339fa3d2de927175aa99da2149e9adae090 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 42709c68c..764e729a4 100644 --- a/dp-core/vr_nexthop.c +++ b/dp-core/vr_nexthop.c @@ -53,7 +53,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; }