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.
Этот коммит содержится в:
родитель
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
|
||||
*/
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user