1
1

Don't release the provided opal_proc in the error path.

Этот коммит содержится в:
George Bosilca 2014-11-06 01:39:25 -05:00
родитель 4e4920a0fd
Коммит 54ddb0aece
3 изменённых файлов: 14 добавлений и 12 удалений

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

@ -98,7 +98,6 @@ int mca_btl_tcp_add_procs( struct mca_btl_base_module_t* btl,
tcp_endpoint = OBJ_NEW(mca_btl_tcp_endpoint_t); tcp_endpoint = OBJ_NEW(mca_btl_tcp_endpoint_t);
if(NULL == tcp_endpoint) { if(NULL == tcp_endpoint) {
OPAL_THREAD_UNLOCK(&tcp_proc->proc_lock); OPAL_THREAD_UNLOCK(&tcp_proc->proc_lock);
OBJ_RELEASE(opal_proc);
return OPAL_ERR_OUT_OF_RESOURCE; return OPAL_ERR_OUT_OF_RESOURCE;
} }
@ -106,7 +105,6 @@ int mca_btl_tcp_add_procs( struct mca_btl_base_module_t* btl,
rc = mca_btl_tcp_proc_insert(tcp_proc, tcp_endpoint); rc = mca_btl_tcp_proc_insert(tcp_proc, tcp_endpoint);
if(rc != OPAL_SUCCESS) { if(rc != OPAL_SUCCESS) {
OPAL_THREAD_UNLOCK(&tcp_proc->proc_lock); OPAL_THREAD_UNLOCK(&tcp_proc->proc_lock);
OBJ_RELEASE(opal_proc);
OBJ_RELEASE(tcp_endpoint); OBJ_RELEASE(tcp_endpoint);
continue; continue;
} }

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

@ -76,12 +76,15 @@ void mca_btl_tcp_proc_construct(mca_btl_tcp_proc_t* tcp_proc)
void mca_btl_tcp_proc_destruct(mca_btl_tcp_proc_t* tcp_proc) void mca_btl_tcp_proc_destruct(mca_btl_tcp_proc_t* tcp_proc)
{ {
/* remove from list of all proc instances */ if( NULL != tcp_proc->proc_opal ) {
OPAL_THREAD_LOCK(&mca_btl_tcp_component.tcp_lock); /* remove from list of all proc instances */
opal_hash_table_remove_value_uint64(&mca_btl_tcp_component.tcp_procs, OPAL_THREAD_LOCK(&mca_btl_tcp_component.tcp_lock);
tcp_proc->proc_opal->proc_name); opal_hash_table_remove_value_uint64(&mca_btl_tcp_component.tcp_procs,
OPAL_THREAD_UNLOCK(&mca_btl_tcp_component.tcp_lock); tcp_proc->proc_opal->proc_name);
OPAL_THREAD_UNLOCK(&mca_btl_tcp_component.tcp_lock);
/* Do not OBJ_RELEASE the proc_opal ! */
/* OBJ_RELEASE(tcp_proc->proc_opal); */
}
/* release resources */ /* release resources */
if(NULL != tcp_proc->proc_endpoints) { if(NULL != tcp_proc->proc_endpoints) {
free(tcp_proc->proc_endpoints); free(tcp_proc->proc_endpoints);
@ -97,7 +100,7 @@ void mca_btl_tcp_proc_destruct(mca_btl_tcp_proc_t* tcp_proc)
* datastructure. * datastructure.
*/ */
mca_btl_tcp_proc_t* mca_btl_tcp_proc_create(const opal_proc_t* proc) mca_btl_tcp_proc_t* mca_btl_tcp_proc_create(opal_proc_t* proc)
{ {
uint64_t hash = proc->proc_name; uint64_t hash = proc->proc_name;
mca_btl_tcp_proc_t* btl_proc; mca_btl_tcp_proc_t* btl_proc;
@ -116,6 +119,7 @@ mca_btl_tcp_proc_t* mca_btl_tcp_proc_create(const opal_proc_t* proc)
if(NULL == btl_proc) if(NULL == btl_proc)
return NULL; return NULL;
btl_proc->proc_opal = proc; btl_proc->proc_opal = proc;
OBJ_RETAIN(btl_proc->proc_opal);
/* add to hash table of all proc instance */ /* add to hash table of all proc instance */
opal_hash_table_set_value_uint64(&mca_btl_tcp_component.tcp_procs, opal_hash_table_set_value_uint64(&mca_btl_tcp_component.tcp_procs,

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

@ -38,7 +38,7 @@ struct mca_btl_tcp_proc_t {
opal_list_item_t super; opal_list_item_t super;
/**< allow proc to be placed on a list */ /**< allow proc to be placed on a list */
const opal_proc_t *proc_opal; opal_proc_t *proc_opal;
/**< pointer to corresponding opal_proc_t */ /**< pointer to corresponding opal_proc_t */
struct mca_btl_tcp_addr_t* proc_addrs; struct mca_btl_tcp_addr_t* proc_addrs;
@ -104,7 +104,7 @@ enum mca_btl_tcp_connection_quality {
}; };
mca_btl_tcp_proc_t* mca_btl_tcp_proc_create(const opal_proc_t* proc); mca_btl_tcp_proc_t* mca_btl_tcp_proc_create(opal_proc_t* proc);
mca_btl_tcp_proc_t* mca_btl_tcp_proc_lookup(const opal_process_name_t* name); mca_btl_tcp_proc_t* mca_btl_tcp_proc_lookup(const opal_process_name_t* name);
int mca_btl_tcp_proc_insert(mca_btl_tcp_proc_t*, mca_btl_base_endpoint_t*); int mca_btl_tcp_proc_insert(mca_btl_tcp_proc_t*, mca_btl_base_endpoint_t*);
int mca_btl_tcp_proc_remove(mca_btl_tcp_proc_t*, mca_btl_base_endpoint_t*); int mca_btl_tcp_proc_remove(mca_btl_tcp_proc_t*, mca_btl_base_endpoint_t*);