1
1

udreg: free huge page allocations correctly

This commit fixes an error path that occurs when huge page allocations are
enabled. In this case we allocate a huge page and try to register it but fail.
We then were calling free on the opal object. Fix this by calling the proper free
function.

cmr=v1.7.4:reviewer=rhc

This commit was SVN r30289.
Этот коммит содержится в:
Nathan Hjelm 2014-01-14 16:26:06 +00:00
родитель f9d2032705
Коммит f2a73fcdbd

Просмотреть файл

@ -281,6 +281,12 @@ static int mca_mpool_udreg_alloc_huge (mca_mpool_udreg_module_t *mpool, size_t s
return 0;
}
static void mca_mpool_udreg_free_huge (mca_mpool_udreg_hugepage_alloc_t *alloc) {
opal_list_remove_item (&alloc->huge_table->allocations, &alloc->super);
OBJ_RELEASE(alloc);
}
/**
* allocate function
*/
@ -320,8 +326,13 @@ void* mca_mpool_udreg_alloc(mca_mpool_base_module_t *mpool, size_t size,
#endif
}
if(OMPI_SUCCESS != mca_mpool_udreg_register(mpool, addr, size, flags, reg)) {
free(base_addr);
if (OMPI_SUCCESS != mca_mpool_udreg_register(mpool, addr, size, flags, reg)) {
if (udreg_module->huge_page) {
mca_mpool_udreg_free_huge ((mca_mpool_udreg_hugepage_alloc_t *) base_addr);
} else {
free(base_addr);
}
return NULL;
}
@ -400,11 +411,6 @@ void* mca_mpool_udreg_realloc(mca_mpool_base_module_t *mpool, void *addr,
return new_mem;
}
static void mca_mpool_udreg_free_huge (mca_mpool_udreg_hugepage_alloc_t *alloc) {
opal_list_remove_item (&alloc->huge_table->allocations, &alloc->super);
OBJ_RELEASE(alloc);
}
/**
* free function
*/