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);
if(NULL == tcp_endpoint) {
OPAL_THREAD_UNLOCK(&tcp_proc->proc_lock);
OBJ_RELEASE(opal_proc);
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);
if(rc != OPAL_SUCCESS) {
OPAL_THREAD_UNLOCK(&tcp_proc->proc_lock);
OBJ_RELEASE(opal_proc);
OBJ_RELEASE(tcp_endpoint);
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)
{
/* remove from list of all proc instances */
OPAL_THREAD_LOCK(&mca_btl_tcp_component.tcp_lock);
opal_hash_table_remove_value_uint64(&mca_btl_tcp_component.tcp_procs,
tcp_proc->proc_opal->proc_name);
OPAL_THREAD_UNLOCK(&mca_btl_tcp_component.tcp_lock);
if( NULL != tcp_proc->proc_opal ) {
/* remove from list of all proc instances */
OPAL_THREAD_LOCK(&mca_btl_tcp_component.tcp_lock);
opal_hash_table_remove_value_uint64(&mca_btl_tcp_component.tcp_procs,
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 */
if(NULL != 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.
*/
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;
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)
return NULL;
btl_proc->proc_opal = proc;
OBJ_RETAIN(btl_proc->proc_opal);
/* add to hash table of all proc instance */
opal_hash_table_set_value_uint64(&mca_btl_tcp_component.tcp_procs,
@ -683,7 +687,7 @@ int mca_btl_tcp_proc_insert( mca_btl_tcp_proc_t* btl_proc,
* Remove an endpoint from the proc array and indicate the address is
* no longer in use.
*/
int mca_btl_tcp_proc_remove(mca_btl_tcp_proc_t* btl_proc, mca_btl_base_endpoint_t* btl_endpoint)
{
size_t i;

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

@ -38,7 +38,7 @@ struct mca_btl_tcp_proc_t {
opal_list_item_t super;
/**< 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 */
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);
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*);