#include "src/include/pmix_config.h"
#include "pmix_common.h"
#include <pthread.h>
#include <event.h>
#include "src/class/pmix_list.h"
#include "src/include/pmix_types.h"
#include "src/mca/base/pmix_base.h"
#include "src/mca/mca.h"
#include "src/runtime/pmix_progress_threads.h"
#include "src/mca/psensor/base/base.h"
#include "src/mca/psensor/base/static-components.h"
pmix_psensor_base_module_t pmix_psensor = {
.start = pmix_psensor_base_start,
.stop = pmix_psensor_base_stop
};
pmix_psensor_base_t pmix_psensor_base = {
.actives = PMIX_LIST_STATIC_INIT,
.evbase = NULL,
.selected = false
};
static bool use_separate_thread = false;
static int pmix_psensor_register(pmix_mca_base_register_flag_t flags)
{
(void) flags;
(void) pmix_mca_base_var_register("pmix", "psensor", "base", "use_separate_thread",
"Use a separate thread for monitoring local procs",
PMIX_MCA_BASE_VAR_TYPE_BOOL,
&use_separate_thread);
return PMIX_SUCCESS;
}
static int pmix_psensor_base_close(void)
{
pmix_psensor_base.selected = false;
PMIX_LIST_DESTRUCT(&pmix_psensor_base.actives);
if (use_separate_thread && NULL != pmix_psensor_base.evbase) {
(void) pmix_progress_thread_stop("PSENSOR");
}
return pmix_mca_base_framework_components_close(&pmix_psensor_base_framework, NULL);
}
static int pmix_psensor_base_open(pmix_mca_base_open_flag_t flags)
{
PMIX_CONSTRUCT(&pmix_psensor_base.actives, pmix_list_t);
if (use_separate_thread) {
pmix_psensor_base.evbase = pmix_progress_thread_init("PSENSOR");
if (NULL == pmix_psensor_base.evbase) {
return PMIX_ERROR;
}
} else {
pmix_psensor_base.evbase = pmix_globals.evbase;
}
return pmix_mca_base_framework_components_open(&pmix_psensor_base_framework, flags);
}
PMIX_MCA_BASE_FRAMEWORK_DECLARE(pmix, psensor, "PMIx Monitoring Sensors", pmix_psensor_register,
pmix_psensor_base_open, pmix_psensor_base_close,
pmix_mca_psensor_base_static_components,
PMIX_MCA_BASE_FRAMEWORK_FLAG_DEFAULT);
PMIX_CLASS_INSTANCE(pmix_psensor_active_module_t, pmix_list_item_t, NULL, NULL);