1
1

ob1 does not check the return code of mpool_register. This can cause the

ob1 dummy registration to actually be used when using udreg. Fix this by
always setting reg to NULL when mpool/udreg's register function fails.

cmr=v1.7.4:reviewer=rhc

This commit was SVN r30214.
Этот коммит содержится в:
Nathan Hjelm 2014-01-10 00:46:16 +00:00
родитель c44a1027d0
Коммит 52c231df3e

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

@ -14,7 +14,7 @@
* Copyright (c) 2006 Voltaire. All rights reserved. * Copyright (c) 2006 Voltaire. All rights reserved.
* Copyright (c) 2007 Mellanox Technologies. All rights reserved. * Copyright (c) 2007 Mellanox Technologies. All rights reserved.
* Copyright (c) 2010 IBM Corporation. All rights reserved. * Copyright (c) 2010 IBM Corporation. All rights reserved.
* Copyright (c) 2011-2013 Los Alamos National Security, LLC. All rights * Copyright (c) 2011-2014 Los Alamos National Security, LLC. All rights
* reserved. * reserved.
* *
* $COPYRIGHT$ * $COPYRIGHT$
@ -358,7 +358,8 @@ int mca_mpool_udreg_register(mca_mpool_base_module_t *mpool, void *addr,
(urc = UDREG_Register (mpool_udreg->udreg_handle, addr, size, &udreg_entry))) { (urc = UDREG_Register (mpool_udreg->udreg_handle, addr, size, &udreg_entry))) {
/* try to remove one unused reg and retry */ /* try to remove one unused reg and retry */
if (!mca_mpool_udreg_evict (mpool)) { if (!mca_mpool_udreg_evict (mpool)) {
break; *reg = NULL;
return OMPI_ERR_OUT_OF_RESOURCE;
} }
} }
@ -369,16 +370,13 @@ int mca_mpool_udreg_register(mca_mpool_base_module_t *mpool, void *addr,
while (NULL == (udreg_reg = mca_mpool_udreg_reg_func (addr, size, mpool))) { while (NULL == (udreg_reg = mca_mpool_udreg_reg_func (addr, size, mpool))) {
/* try to remove one unused reg and retry */ /* try to remove one unused reg and retry */
if (!mca_mpool_udreg_evict (mpool)) { if (!mca_mpool_udreg_evict (mpool)) {
break; *reg = NULL;
return OMPI_ERR_OUT_OF_RESOURCE;
} }
} }
udreg_reg->mpool_context = NULL; udreg_reg->mpool_context = NULL;
} }
if (NULL == udreg_reg) {
return OMPI_ERR_OUT_OF_RESOURCE;
}
udreg_reg->flags = flags; udreg_reg->flags = flags;
*reg = udreg_reg; *reg = udreg_reg;