diff --git a/orte/mca/oob/base/base.h b/orte/mca/oob/base/base.h index 75d90f82b6..b1327c4e23 100644 --- a/orte/mca/oob/base/base.h +++ b/orte/mca/oob/base/base.h @@ -170,6 +170,10 @@ OBJ_CLASS_DECLARATION(mca_oob_uri_req_t); }while(0); ORTE_DECLSPEC void orte_oob_base_set_addr(int fd, short args, void *cbdata); +#if OPAL_ENABLE_FT_CR == 1 +ORTE_DECLSPEC void orte_oob_base_ft_event(int fd, short args, void *cbdata); +#endif + END_C_DECLS #endif diff --git a/orte/mca/oob/base/oob_base_frame.c b/orte/mca/oob/base/oob_base_frame.c index 02634deab8..1e5ca736ee 100644 --- a/orte/mca/oob/base/oob_base_frame.c +++ b/orte/mca/oob/base/oob_base_frame.c @@ -87,6 +87,11 @@ static int orte_oob_base_open(mca_base_open_flag_t flags) opal_hash_table_init(&orte_oob_base.peers, 128); OBJ_CONSTRUCT(&orte_oob_base.actives, opal_list_t); +#if OPAL_ENABLE_FT_CR == 1 + /* register the FT event callback */ + orte_state.add_job_state(ORTE_JOB_STATE_FT_EVENT, orte_oob_ft_event, ORTE_ERROR_PRI); +#endif + /* Open up all available components */ return mca_base_framework_components_open(&orte_oob_base_framework, flags); } diff --git a/orte/mca/oob/base/oob_base_stubs.c b/orte/mca/oob/base/oob_base_stubs.c index 03db122335..b57eb413a7 100644 --- a/orte/mca/oob/base/oob_base_stubs.c +++ b/orte/mca/oob/base/oob_base_stubs.c @@ -379,12 +379,12 @@ static void process_uri(char *uri) opal_argv_free(uris); } -#if 0 - -int mca_oob_base_ft_event(int state) +#if OPAL_ENABLE_FT_CR == 1 +void orte_oob_base_ft_event(int sd, short argc, void *cbdata) { int rc; mca_oob_module_t *mod; + orte_state_caddy_t *state = (orte_state_caddy_t*)cbdata; /* loop across all available modules in priority order * and call each one's ft_event handler @@ -396,8 +396,7 @@ int mca_oob_base_ft_event(int state) } } } - - return ORTE_SUCCESS; + OBJ_RELEASE(state); } #endif diff --git a/orte/mca/plm/plm_types.h b/orte/mca/plm/plm_types.h index 1aea21f671..1bb17cc9db 100644 --- a/orte/mca/plm/plm_types.h +++ b/orte/mca/plm/plm_types.h @@ -173,6 +173,10 @@ typedef int32_t orte_job_state_t; #define ORTE_JOB_STATE_REPORT_PROGRESS (ORTE_JOB_STATE_ERROR + 17) /* report launch progress - not an error */ #define ORTE_JOB_STATE_ALLOC_FAILED (ORTE_JOB_STATE_ERROR + 18) /* job failed to obtain an allocation */ +/* define an FT event */ +#define ORTE_JOB_STATE_FT_EVENT (ORTE_JOB_STATE_ERROR + 19) + + /* Define a boundary so that external developers * have a starting point for defining their own * job states