diff --git a/ompi/mca/crcp/base/crcp_base_fns.c b/ompi/mca/crcp/base/crcp_base_fns.c index 593756bf80..f931169c55 100644 --- a/ompi/mca/crcp/base/crcp_base_fns.c +++ b/ompi/mca/crcp/base/crcp_base_fns.c @@ -548,7 +548,6 @@ int ompi_crcp_base_reboot_pml(ompi_crcp_base_pml_state_t* pml_state) { /* Enable the PML */ opal_output_verbose(25, ompi_crcp_base_output, "crcp:coord: reboot_pml(): PML Enable"); - /* JJH RETURN HERE -- mca_bml_r2.btl_modules is corrupted. I bet it is not removed properly....*/ if( OMPI_SUCCESS != (ret = MCA_PML_CALL(enable(true)) ) ) { error_msg = "PML control failed"; return_code = ret; diff --git a/ompi/mca/pml/base/pml_base_close.c b/ompi/mca/pml/base/pml_base_close.c index f38b8382eb..6089d9a52a 100644 --- a/ompi/mca/pml/base/pml_base_close.c +++ b/ompi/mca/pml/base/pml_base_close.c @@ -41,6 +41,8 @@ int mca_pml_base_close(void) mca_pml_base_selected_component.pmlm_finalize(); } + OBJ_DESTRUCT(&mca_pml_base_pml); + /* Close all remaining available modules (may be one if this is a OMPI RTE program, or [possibly] multiple if this is ompi_info) */ diff --git a/ompi/mca/pml/base/pml_base_module_exchange.c b/ompi/mca/pml/base/pml_base_module_exchange.c index 2c4c305f6f..1f3d0a14a7 100644 --- a/ompi/mca/pml/base/pml_base_module_exchange.c +++ b/ompi/mca/pml/base/pml_base_module_exchange.c @@ -207,6 +207,8 @@ mca_pml_base_modex_finalize(void) OBJ_RELEASE(item); OBJ_DESTRUCT(&mca_pml_base_modex_subscriptions); + OBJ_DESTRUCT(&mca_pml_base_modex_lock); + return OMPI_SUCCESS; } diff --git a/ompi/mca/pml/base/pml_base_select.c b/ompi/mca/pml/base/pml_base_select.c index a5cdd937b0..4bb4e630e0 100644 --- a/ompi/mca/pml/base/pml_base_select.c +++ b/ompi/mca/pml/base/pml_base_select.c @@ -86,6 +86,7 @@ int mca_pml_base_select(bool enable_progress_threads, if(0 == strncmp(component->pmlm_version.mca_component_name, tmp_val, strlen(component->pmlm_version.mca_component_name)) ) { found_pml = true; + break; } } diff --git a/ompi/mca/pml/ob1/pml_ob1.c b/ompi/mca/pml/ob1/pml_ob1.c index 8d42b6dd27..a764d65d33 100644 --- a/ompi/mca/pml/ob1/pml_ob1.c +++ b/ompi/mca/pml/ob1/pml_ob1.c @@ -56,7 +56,7 @@ mca_pml_ob1_t mca_pml_ob1 = { mca_pml_ob1_probe, mca_pml_ob1_start, mca_pml_ob1_dump, - mca_pml_base_ft_event, + mca_pml_ob1_ft_event, 32768, INT_MAX } @@ -374,3 +374,54 @@ void mca_pml_ob1_error_handler( int32_t flags) { orte_errmgr.abort(); } + +int mca_pml_ob1_ft_event( int state ) +{ + int ret; + + opal_output(0, "pml:base: ft_event: Called (%d)!!\n", state); + + if(OPAL_CRS_CHECKPOINT == state) { + ; + } + else if(OPAL_CRS_CONTINUE == state) { + ; + } + else if(OPAL_CRS_RESTART == state) { + ; + } + else if(OPAL_CRS_TERM == state ) { + ; + } + else { + ; + } + + /* Call the BML + * BML is expected to call ft_event in + * - BTL(s) + * - MPool(s) + */ + if( OMPI_SUCCESS != (ret = mca_bml.bml_ft_event(state))) { + opal_output(0, "pml:base: ft_event: BML ft_event function failed: %d\n", + ret); + } + + if(OPAL_CRS_CHECKPOINT == state) { + ; + } + else if(OPAL_CRS_CONTINUE == state) { + ; + } + else if(OPAL_CRS_RESTART == state) { + ; + } + else if(OPAL_CRS_TERM == state ) { + ; + } + else { + ; + } + + return OMPI_SUCCESS; +} diff --git a/ompi/mca/pml/ob1/pml_ob1.h b/ompi/mca/pml/ob1/pml_ob1.h index 69a777ce25..eb67273932 100644 --- a/ompi/mca/pml/ob1/pml_ob1.h +++ b/ompi/mca/pml/ob1/pml_ob1.h @@ -216,6 +216,10 @@ extern int mca_pml_ob1_start( ompi_request_t** requests ); +extern int mca_pml_ob1_ft_event( + int state +); + #if defined(c_plusplus) || defined(__cplusplus) } #endif diff --git a/ompi/mca/pml/ob1/pml_ob1_component.c b/ompi/mca/pml/ob1/pml_ob1_component.c index 28e2b7d990..d5e565fb84 100644 --- a/ompi/mca/pml/ob1/pml_ob1_component.c +++ b/ompi/mca/pml/ob1/pml_ob1_component.c @@ -223,6 +223,11 @@ int mca_pml_ob1_component_close(void) if(OMPI_SUCCESS != (rc = mca_bml_base_close())) return rc; + /* buffered send */ + if(OMPI_SUCCESS != (rc = mca_pml_base_bsend_fini())) { + return rc; + } + OBJ_DESTRUCT(&mca_pml_ob1.pckt_pending); OBJ_DESTRUCT(&mca_pml_ob1.send_pending); OBJ_DESTRUCT(&mca_pml_ob1.recv_pending);