1
1

Move ompi_pointer_array initialization and destruction outside of the memory

callback, note that ompi_pointer_array_remove_all does not call free. 
This needs to go to the release branch 

This commit was SVN r8944.
Этот коммит содержится в:
Galen Shipman 2006-02-08 22:40:40 +00:00
родитель 600f664db2
Коммит 1c71ab73d1
3 изменённых файлов: 10 добавлений и 7 удалений

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

@ -28,6 +28,7 @@
#include "mpool_base_mem_cb.h" #include "mpool_base_mem_cb.h"
extern int mca_mpool_base_use_mem_hooks; extern int mca_mpool_base_use_mem_hooks;
extern ompi_pointer_array_t mca_mpool_base_mem_cb_array;
int mca_mpool_base_close(void) int mca_mpool_base_close(void)
{ {
@ -62,6 +63,7 @@ int mca_mpool_base_close(void)
if(mca_mpool_base_use_mem_hooks && if(mca_mpool_base_use_mem_hooks &&
0 != (OPAL_MEMORY_FREE_SUPPORT & opal_mem_hooks_support_level())) { 0 != (OPAL_MEMORY_FREE_SUPPORT & opal_mem_hooks_support_level())) {
opal_mem_hooks_unregister_release(mca_mpool_base_mem_cb); opal_mem_hooks_unregister_release(mca_mpool_base_mem_cb);
OBJ_DESTRUCT(&mca_mpool_base_mem_cb_array);
} }
/* All done */ /* All done */

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

@ -34,6 +34,7 @@ extern int mca_mpool_base_disable_sbrk;
extern int mca_mpool_base_use_mem_hooks; extern int mca_mpool_base_use_mem_hooks;
extern ompi_pointer_array_t mca_mpool_base_mem_cb_array;
mca_mpool_base_component_t* mca_mpool_base_component_lookup(const char* name) mca_mpool_base_component_t* mca_mpool_base_component_lookup(const char* name)
{ {
@ -91,7 +92,8 @@ mca_mpool_base_module_t* mca_mpool_base_module_create(
if(opal_list_get_size(&mca_mpool_base_modules) == 1) { if(opal_list_get_size(&mca_mpool_base_modules) == 1) {
if(mca_mpool_base_use_mem_hooks && if(mca_mpool_base_use_mem_hooks &&
0 != (OPAL_MEMORY_FREE_SUPPORT & opal_mem_hooks_support_level())) { 0 != (OPAL_MEMORY_FREE_SUPPORT & opal_mem_hooks_support_level())) {
opal_mem_hooks_register_release(mca_mpool_base_mem_cb, NULL); opal_mem_hooks_register_release(mca_mpool_base_mem_cb, NULL);
OBJ_CONSTRUCT(&mca_mpool_base_mem_cb_array, ompi_pointer_array_t);
} }
#ifdef HAVE_MALLOC_H #ifdef HAVE_MALLOC_H

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

@ -26,6 +26,7 @@
extern uint32_t mca_mpool_base_page_size; extern uint32_t mca_mpool_base_page_size;
extern uint32_t mca_mpool_base_page_size_log; extern uint32_t mca_mpool_base_page_size_log;
ompi_pointer_array_t mca_mpool_base_mem_cb_array;
/* /*
* memory hook callback, called when memory is free'd out from under us * memory hook callback, called when memory is free'd out from under us
@ -34,7 +35,6 @@ void mca_mpool_base_mem_cb(void* base, size_t size, void* cbdata,
bool from_alloc) bool from_alloc)
{ {
uint32_t i, cnt; uint32_t i, cnt;
ompi_pointer_array_t regs;
mca_mpool_base_registration_t* reg; mca_mpool_base_registration_t* reg;
mca_mpool_base_selected_module_t* current; mca_mpool_base_selected_module_t* current;
int rc; int rc;
@ -47,7 +47,6 @@ void mca_mpool_base_mem_cb(void* base, size_t size, void* cbdata,
base_addr = down_align_addr( base, mca_mpool_base_page_size_log); base_addr = down_align_addr( base, mca_mpool_base_page_size_log);
bound_addr = up_align_addr((void*) ((unsigned long) base + size - 1), mca_mpool_base_page_size_log); bound_addr = up_align_addr((void*) ((unsigned long) base + size - 1), mca_mpool_base_page_size_log);
OBJ_CONSTRUCT(&regs, ompi_pointer_array_t);
for(item = opal_list_get_first(&mca_mpool_base_modules); for(item = opal_list_get_first(&mca_mpool_base_modules);
item != opal_list_get_end(&mca_mpool_base_modules); item != opal_list_get_end(&mca_mpool_base_modules);
item = opal_list_get_next(item)) { item = opal_list_get_next(item)) {
@ -59,14 +58,14 @@ void mca_mpool_base_mem_cb(void* base, size_t size, void* cbdata,
current->mpool_module, current->mpool_module,
base_addr, base_addr,
size, size,
&regs, &mca_mpool_base_mem_cb_array,
&cnt &cnt
); );
if(OMPI_SUCCESS != rc) { if(OMPI_SUCCESS != rc) {
continue; continue;
} }
for(i = 0; i < cnt; i++) { for(i = 0; i < cnt; i++) {
reg = (mca_mpool_base_registration_t*)ompi_pointer_array_get_item(&regs, i); reg = (mca_mpool_base_registration_t*)ompi_pointer_array_get_item(&mca_mpool_base_mem_cb_array, i);
#if !defined(NDEBUG) #if !defined(NDEBUG)
if(reg->flags & MCA_MPOOL_FLAGS_CACHE) { if(reg->flags & MCA_MPOOL_FLAGS_CACHE) {
assert(reg->ref_count <= 3); assert(reg->ref_count <= 3);
@ -78,10 +77,10 @@ void mca_mpool_base_mem_cb(void* base, size_t size, void* cbdata,
#endif #endif
current->mpool_module->mpool_deregister(current->mpool_module, reg); current->mpool_module->mpool_deregister(current->mpool_module, reg);
} }
ompi_pointer_array_remove_all(&regs); ompi_pointer_array_remove_all(&mca_mpool_base_mem_cb_array);
} }
} }
OBJ_DESTRUCT(&regs);
} }