From 5c9157c547f1bb4079f86b867f7826c478a435ea Mon Sep 17 00:00:00 2001 From: Brice Goglin Date: Sun, 18 Jan 2015 12:33:57 +0100 Subject: [PATCH] hwloc: core: only update root->complete sets if insert succeeds Otherwise we get spurious bits for crazy topologies such as 8em64t-2s2ca2c-buggynuma.output Will make debug asserts easier. (cherry picked from commit open-mpi/hwloc@546cd9330a401c0c910760c316b33cfc8fd16bef) Signed-off-by: Jeff Squyres --- opal/mca/hwloc/hwloc191/hwloc/src/topology.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/opal/mca/hwloc/hwloc191/hwloc/src/topology.c b/opal/mca/hwloc/hwloc191/hwloc/src/topology.c index 911a5422fc..55340ea2dc 100644 --- a/opal/mca/hwloc/hwloc191/hwloc/src/topology.c +++ b/opal/mca/hwloc/hwloc191/hwloc/src/topology.c @@ -1026,14 +1026,16 @@ hwloc__insert_object_by_cpuset(struct hwloc_topology *topology, hwloc_obj_t obj, { struct hwloc_obj *result; /* Start at the top. */ - /* Add the cpuset to the top */ - hwloc_bitmap_or(topology->levels[0][0]->complete_cpuset, topology->levels[0][0]->complete_cpuset, obj->cpuset); - if (obj->nodeset) - hwloc_bitmap_or(topology->levels[0][0]->complete_nodeset, topology->levels[0][0]->complete_nodeset, obj->nodeset); result = hwloc___insert_object_by_cpuset(topology, topology->levels[0][0], obj, report_error); - if (result != obj) + if (result != obj) { /* either failed to insert, or got merged, free the original object */ hwloc_free_unlinked_object(obj); + } else { + /* Add the cpuset to the top */ + hwloc_bitmap_or(topology->levels[0][0]->complete_cpuset, topology->levels[0][0]->complete_cpuset, obj->cpuset); + if (obj->nodeset) + hwloc_bitmap_or(topology->levels[0][0]->complete_nodeset, topology->levels[0][0]->complete_nodeset, obj->nodeset); + } return result; }