1
1

OSHMEM: Fix call prepare_src with a NULL endpoint

see issue: https://svn.open-mpi.org/trac/ompi/ticket/4399

Refs trac:4399

fixed by Igor, reviewed by Alex
cmr=v1.7.5:reviewer=ompi-rm1.7

This commit was SVN r31168.

The following Trac tickets were found above:
  Ticket 4399 --> https://svn.open-mpi.org/trac/ompi/ticket/4399
Этот коммит содержится в:
Mike Dubman 2014-03-20 13:11:25 +00:00
родитель 08fd24f452
Коммит d8288fa39d
2 изменённых файлов: 10 добавлений и 9 удалений

Просмотреть файл

@ -411,10 +411,6 @@ sshmem_mkey_t *mca_spml_yoda_register(void* addr,
yoda_context->registration = NULL; yoda_context->registration = NULL;
if (NULL != ybtl->btl->btl_prepare_src) { if (NULL != ybtl->btl->btl_prepare_src) {
int btl_id;
mca_bml_base_btl_t* bml_btl;
bml_btl = get_next_btl(oshmem_my_proc_id(), &btl_id);
/* initialize convertor for source descriptor*/ /* initialize convertor for source descriptor*/
opal_convertor_copy_and_prepare_for_recv(proc_self->proc_convertor, opal_convertor_copy_and_prepare_for_recv(proc_self->proc_convertor,
@ -442,7 +438,7 @@ sshmem_mkey_t *mca_spml_yoda_register(void* addr,
/* register source memory */ /* register source memory */
des = ybtl->btl->btl_prepare_src(ybtl->btl, des = ybtl->btl->btl_prepare_src(ybtl->btl,
bml_btl->btl_endpoint, ybtl->bml_btl->btl_endpoint,
yoda_context->registration, yoda_context->registration,
&convertor, &convertor,
MCA_BTL_NO_ORDER, MCA_BTL_NO_ORDER,
@ -484,7 +480,7 @@ static void mca_spml_yoda_error_handler(struct mca_btl_base_module_t* btl,
/* make global btl list&map */ /* make global btl list&map */
static int create_btl_list(void) static int create_btl_list(void)
{ {
int btl_id; int btl_type;
char *btl_name; char *btl_name;
int size; int size;
opal_list_item_t *item; opal_list_item_t *item;
@ -510,12 +506,15 @@ static int create_btl_list(void)
btl_sm = (mca_btl_base_selected_module_t *) item; btl_sm = (mca_btl_base_selected_module_t *) item;
btl_name = btl_sm->btl_component->btl_version.mca_component_name; btl_name = btl_sm->btl_component->btl_version.mca_component_name;
btl_id = btl_name_to_id(btl_name); btl_type = btl_name_to_id(btl_name);
SPML_VERBOSE(50, "found btl (%s) btl_id=%d", btl_name, btl_id); SPML_VERBOSE(50, "found btl (%s) btl_type=%s", btl_name, btl_type2str(btl_type));
/* Note: we setup bml_btl in create_btl_idx() */
mca_spml_yoda.btl_type_map[mca_spml_yoda.n_btls].bml_btl = NULL;
mca_spml_yoda.btl_type_map[mca_spml_yoda.n_btls].btl = mca_spml_yoda.btl_type_map[mca_spml_yoda.n_btls].btl =
btl_sm->btl_module; btl_sm->btl_module;
mca_spml_yoda.btl_type_map[mca_spml_yoda.n_btls].btl_type = btl_id; mca_spml_yoda.btl_type_map[mca_spml_yoda.n_btls].btl_type = btl_type;
mca_spml_yoda.n_btls++; mca_spml_yoda.n_btls++;
} }
@ -601,6 +600,7 @@ static int create_btl_idx(int dst_pe)
return OSHMEM_ERROR; return OSHMEM_ERROR;
} }
proc->transport_ids[i] = btl_id; proc->transport_ids[i] = btl_id;
mca_spml_yoda.btl_type_map[btl_id].bml_btl = bml_btl;
mca_spml_yoda.btl_type_map[btl_id].use_cnt++; mca_spml_yoda.btl_type_map[btl_id].use_cnt++;
} }
return OSHMEM_SUCCESS; return OSHMEM_SUCCESS;

Просмотреть файл

@ -55,6 +55,7 @@ enum {
struct yoda_btl { struct yoda_btl {
mca_btl_base_module_t *btl; mca_btl_base_module_t *btl;
mca_bml_base_btl_t *bml_btl;
int btl_type; int btl_type;
int use_cnt; int use_cnt;
}; };