1
1
openmpi/orte/mca/notifier/base/notifier_base_select.c
Nathan Hjelm 4d92c9989e more c99 updates
This commit does two things. It removes checks for C99 required
headers (stdlib.h, string.h, signal.h, etc). Additionally it removes
definitions for required C99 types (intptr_t, int64_t, int32_t, etc).

Signed-off-by: Nathan Hjelm <hjelmn@me.com>
2015-06-25 10:14:13 -06:00

128 строки
4.8 KiB
C

/*
* Copyright (c) 2004-2008 The Trustees of Indiana University and Indiana
* University Research and Technology
* Corporation. All rights reserved.
* Copyright (c) 2004-2005 The University of Tennessee and The University
* of Tennessee Research Foundation. All rights
* reserved.
* Copyright (c) 2004-2005 High Performance Computing Center Stuttgart,
* University of Stuttgart. All rights reserved.
* Copyright (c) 2004-2005 The Regents of the University of California.
* All rights reserved.
* Copyright (c) 2009 Cisco Systems, Inc. All rights reserved.
* Copyright (c) 2014-2015 Intel, Inc. All rights reserved.
* $COPYRIGHT$
*
* Additional copyrights may follow
*
* $HEADER$
*/
#include "orte_config.h"
#include <string.h>
#include "orte/mca/mca.h"
#include "opal/mca/base/base.h"
#include "opal/util/argv.h"
#include "opal/util/output.h"
#include "opal/class/opal_pointer_array.h"
#include "orte/mca/notifier/base/base.h"
/* Global variables */
/*
* orte_notifier_base_selected is set to true if at least 1 module has
* been selected for the notifier log API interface.
*/
static bool orte_notifier_base_selected = false;
/**
* Function for weeding out notifier components that don't want to run.
*
* Call the init function on all available compoenent to find out if
* they want to run. Select all components that don't fail. Failing
* Components will be closed and unloaded. The selected modules will
* be returned to the called in a opal_list_t.
*/
int orte_notifier_base_select(void)
{
mca_base_component_list_item_t *cli = NULL;
orte_notifier_base_component_t *component = NULL;
mca_base_module_t *module = NULL;
int priority;
orte_notifier_active_module_t *tmp_module;
orte_notifier_base_module_t *bmod;
if (orte_notifier_base_selected) {
return ORTE_SUCCESS;
}
orte_notifier_base_selected = true;
opal_output_verbose(10, orte_notifier_base_framework.framework_output,
"notifier:base:select: Auto-selecting components");
/*
* Traverse the list of available components.
* For each call their 'query' functions to see if they are available.
*/
OPAL_LIST_FOREACH(cli, &orte_notifier_base_framework.framework_components, mca_base_component_list_item_t) {
component = (orte_notifier_base_component_t *) cli->cli_component;
/*
* If there is a query function then use it.
*/
if (NULL == component->base_version.mca_query_component) {
opal_output_verbose(5, orte_notifier_base_framework.framework_output,
"notifier:base:select Skipping component [%s]. It does not implement a query function",
component->base_version.mca_component_name );
continue;
}
/*
* Query this component for the module and priority
*/
opal_output_verbose(5, orte_notifier_base_framework.framework_output,
"notifier:base:select Querying component [%s]",
component->base_version.mca_component_name);
component->base_version.mca_query_component(&module, &priority);
/*
* If no module was returned or negative priority, then skip component
*/
if (NULL == module || priority < 0) {
opal_output_verbose(5, orte_notifier_base_framework.framework_output,
"notifier:base:select Skipping component [%s]. Query failed to return a module",
component->base_version.mca_component_name );
continue;
}
bmod = (orte_notifier_base_module_t*)module;
/* see if it can be init'd */
if (NULL != bmod->init) {
opal_output_verbose(5, orte_notifier_base_framework.framework_output,
"notifier:base:init module called with priority [%s] %d",
component->base_version.mca_component_name, priority);
if (ORTE_SUCCESS != bmod->init()) {
continue;
}
}
/*
* Append them to the list
*/
opal_output_verbose(5, orte_notifier_base_framework.framework_output,
"notifier:base:select adding component [%s]",
component->base_version.mca_component_name);
tmp_module = OBJ_NEW(orte_notifier_active_module_t);
tmp_module->component = component;
tmp_module->module = (orte_notifier_base_module_t*)module;
opal_list_append(&orte_notifier_base.modules, (void*)tmp_module);
}
return ORTE_SUCCESS;
}