Skip to content

Commit

Permalink
core: properly handle realloc() erros when reconnecting levels
Browse files Browse the repository at this point in the history
Refs #202.
  • Loading branch information
bgoglin committed Aug 10, 2016
1 parent 8a63a9a commit c04eb5d
Showing 1 changed file with 8 additions and 5 deletions.
13 changes: 8 additions & 5 deletions hwloc/topology.c
Original file line number Diff line number Diff line change
Expand Up @@ -2494,18 +2494,21 @@ hwloc_connect_levels(hwloc_topology_t topology)

if (topology->nb_levels == topology->nb_levels_allocated) {
/* extend the arrays of levels */
topology->levels = realloc(topology->levels,
2 * topology->nb_levels_allocated * sizeof(*topology->levels));
topology->level_nbobjects = realloc(topology->level_nbobjects,
2 * topology->nb_levels_allocated * sizeof(*topology->level_nbobjects));
if (!topology->levels || !topology->level_nbobjects) {
void *tmplevels, *tmpnbobjs;
tmplevels = realloc(topology->levels,
2 * topology->nb_levels_allocated * sizeof(*topology->levels));
tmpnbobjs = realloc(topology->level_nbobjects,
2 * topology->nb_levels_allocated * sizeof(*topology->level_nbobjects));
if (!tmplevels || !tmpnbobjs) {
fprintf(stderr, "hwloc failed to realloc level arrays to %u\n", topology->nb_levels_allocated * 2);
free(objs);
free(taken_objs);
free(new_objs);
errno = ENOMEM;
return -1;
}
topology->levels = tmplevels;
topology->level_nbobjects = tmpnbobjs;
memset(topology->levels + topology->nb_levels_allocated,
0, topology->nb_levels_allocated * sizeof(*topology->levels));
memset(topology->level_nbobjects + topology->nb_levels_allocated,
Expand Down

0 comments on commit c04eb5d

Please sign in to comment.