#include "src/include/pmix_config.h"
#include "pmix_common.h"
#include "src/class/pmix_list.h"
#include "src/mca/base/pmix_base.h"
#include "src/mca/base/pmix_mca_base_component_repository.h"
#include "src/mca/mca.h"
#include "src/util/pmix_output.h"
void pmix_mca_base_component_unload(const pmix_mca_base_component_t *component, int output_id)
{
int ret;
pmix_output_verbose(PMIX_MCA_BASE_VERBOSE_COMPONENT, output_id,
"mca: base: close: unloading component %s",
component->pmix_mca_component_name);
ret = pmix_mca_base_var_group_find(component->pmix_mca_project_name,
component->pmix_mca_type_name,
component->pmix_mca_component_name);
if (0 <= ret) {
pmix_mca_base_var_group_deregister(ret);
}
pmix_mca_base_component_repository_release(component);
}
void pmix_mca_base_component_close(const pmix_mca_base_component_t *component, int output_id)
{
if (NULL != component->pmix_mca_close_component) {
component->pmix_mca_close_component();
pmix_output_verbose(PMIX_MCA_BASE_VERBOSE_COMPONENT, output_id,
"mca: base: close: component %s closed",
component->pmix_mca_component_name);
}
pmix_mca_base_component_unload(component, output_id);
}
int pmix_mca_base_framework_components_close(pmix_mca_base_framework_t *framework,
const pmix_mca_base_component_t *skip)
{
return pmix_mca_base_components_close(framework->framework_output,
&framework->framework_components, skip);
}
int pmix_mca_base_components_close(int output_id, pmix_list_t *components,
const pmix_mca_base_component_t *skip)
{
pmix_mca_base_component_list_item_t *cli, *next;
PMIX_LIST_FOREACH_SAFE (cli, next, components, pmix_mca_base_component_list_item_t) {
if (skip == cli->cli_component) {
continue;
}
pmix_mca_base_component_close(cli->cli_component, output_id);
pmix_list_remove_item(components, &cli->super);
PMIX_RELEASE(cli);
}
return PMIX_SUCCESS;
}