void oshmem_proc_group_finalize_scoll(void) { int max, i; oshmem_group_t *group; /* Check whether we have some left */ max = opal_pointer_array_get_size(&oshmem_group_array); for (i = 0; i < max; i++) { group = (oshmem_group_t *) opal_pointer_array_get_item(&oshmem_group_array, i); if (NULL != group) { mca_scoll_base_group_unselect(group); } } }
static void oshmem_proc_group_destroy_internal(oshmem_group_t* group, int scoll_unselect) { if (NULL == group) { return; } if (scoll_unselect) { mca_scoll_base_group_unselect(group); } /* Destroy proc array */ if (group->proc_array) { free(group->proc_array); } /* Destroy peer list */ { opal_list_item_t *item; while (NULL != (item = opal_list_remove_first(&(group->peer_list)))) { /* destruct the item (we constructed it), then free the memory chunk */ OBJ_RELEASE(item); } OBJ_DESTRUCT(&(group->peer_list)); } /* reset the oshmem_group_array entry - make sure that the * entry is in the table */ if (NULL != opal_pointer_array_get_item(&oshmem_group_array, group->id)) { opal_pointer_array_set_item(&oshmem_group_array, group->id, NULL ); } OBJ_RELEASE(group); }
static int _shmem_finalize(void) { int ret = OSHMEM_SUCCESS; shmem_barrier_all(); shmem_lock_finalize(); /* Finalize preconnect framework */ if (OSHMEM_SUCCESS != (ret = oshmem_shmem_preconnect_all_finalize())) { return ret; } /* free requests */ if (OSHMEM_SUCCESS != (ret = oshmem_request_finalize())) { return ret; } /* must free cached groups before we kill collectives */ if (OSHMEM_SUCCESS != (ret = oshmem_group_cache_list_free())) { return ret; } /* We need to call mca_scoll_base_group_unselect explicitly for each group * that are not freed by oshmem_group_cache_list_free. We can only release its collectives at this point */ mca_scoll_base_group_unselect(oshmem_group_all); mca_scoll_base_group_unselect(oshmem_group_self); /* Close down MCA modules */ if (OSHMEM_SUCCESS != (ret = mca_base_framework_close(&oshmem_atomic_base_framework) ) ) { return ret; } if (OSHMEM_SUCCESS != (ret = mca_base_framework_close(&oshmem_scoll_base_framework) ) ) { return ret; } if (OSHMEM_SUCCESS != (ret = mca_base_framework_close(&oshmem_memheap_base_framework) ) ) { return ret; } if (OSHMEM_SUCCESS != (ret = mca_base_framework_close(&oshmem_sshmem_base_framework) ) ) { return ret; } if (OSHMEM_SUCCESS != (ret = MCA_SPML_CALL(del_procs(oshmem_group_all->proc_array, oshmem_group_all->proc_count)))) { return ret; } oshmem_shmem_barrier(); /* free spml resource */ if (OSHMEM_SUCCESS != (ret = mca_spml_base_finalize())) { return ret; } if (OSHMEM_SUCCESS != (ret = mca_base_framework_close(&oshmem_spml_base_framework) ) ) { return ret; } /* free op resources */ if (OSHMEM_SUCCESS != (ret = oshmem_op_finalize())) { return ret; } /* free proc_group resources */ if (OSHMEM_SUCCESS != (ret = oshmem_proc_group_finalize())) { return ret; } /* free proc resources */ if (OSHMEM_SUCCESS != (ret = oshmem_proc_finalize())) { return ret; } /* free info resources */ if (OSHMEM_SUCCESS != (ret = oshmem_info_finalize())) { return ret; } return ret; }