init seg_num_procs_inited to zero before the atomic add.
This commit was SVN r25710.
Этот коммит содержится в:
родитель
167ad944c4
Коммит
63869c431b
@ -75,7 +75,8 @@ static opal_shmem_ds_t shmem_ds;
|
|||||||
/* ////////////////////////////////////////////////////////////////////////// */
|
/* ////////////////////////////////////////////////////////////////////////// */
|
||||||
static mca_common_sm_module_t *
|
static mca_common_sm_module_t *
|
||||||
attach_and_init(size_t size_ctl_structure,
|
attach_and_init(size_t size_ctl_structure,
|
||||||
size_t data_seg_alignment)
|
size_t data_seg_alignment,
|
||||||
|
bool first_call)
|
||||||
{
|
{
|
||||||
mca_common_sm_module_t *map = NULL;
|
mca_common_sm_module_t *map = NULL;
|
||||||
mca_common_sm_seg_header_t *seg = NULL;
|
mca_common_sm_seg_header_t *seg = NULL;
|
||||||
@ -129,6 +130,12 @@ attach_and_init(size_t size_ctl_structure,
|
|||||||
* seg_num_procs_attached_and_inited. this value is used by
|
* seg_num_procs_attached_and_inited. this value is used by
|
||||||
* opal_shmem_unlink.
|
* opal_shmem_unlink.
|
||||||
*/
|
*/
|
||||||
|
if (first_call) {
|
||||||
|
/* make sure that the first call to this function initializes
|
||||||
|
* seg_num_procs_inited to zero */
|
||||||
|
map->module_seg->seg_num_procs_inited = 0;
|
||||||
|
opal_atomic_wmb();
|
||||||
|
}
|
||||||
(void)opal_atomic_add_size_t(&map->module_seg->seg_num_procs_inited, 1);
|
(void)opal_atomic_add_size_t(&map->module_seg->seg_num_procs_inited, 1);
|
||||||
opal_atomic_wmb();
|
opal_atomic_wmb();
|
||||||
|
|
||||||
@ -202,7 +209,7 @@ mca_common_sm_init(ompi_proc_t **procs,
|
|||||||
if (lowest_local_proc) {
|
if (lowest_local_proc) {
|
||||||
if (OPAL_SUCCESS == opal_shmem_segment_create(&shmem_ds, file_name,
|
if (OPAL_SUCCESS == opal_shmem_segment_create(&shmem_ds, file_name,
|
||||||
size)) {
|
size)) {
|
||||||
map = attach_and_init(size_ctl_structure, data_seg_alignment);
|
map = attach_and_init(size_ctl_structure, data_seg_alignment, true);
|
||||||
if (NULL != map) {
|
if (NULL != map) {
|
||||||
size_t mem_offset = map->module_data_addr -
|
size_t mem_offset = map->module_data_addr -
|
||||||
(unsigned char *)map->module_seg;
|
(unsigned char *)map->module_seg;
|
||||||
@ -237,7 +244,8 @@ mca_common_sm_init(ompi_proc_t **procs,
|
|||||||
*/
|
*/
|
||||||
if (OPAL_SHMEM_DS_IS_VALID(&shmem_ds)) {
|
if (OPAL_SHMEM_DS_IS_VALID(&shmem_ds)) {
|
||||||
if (!lowest_local_proc) {
|
if (!lowest_local_proc) {
|
||||||
map = attach_and_init(size_ctl_structure, data_seg_alignment);
|
map = attach_and_init(size_ctl_structure, data_seg_alignment,
|
||||||
|
false);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
/* wait until every other participating process has attached to the
|
/* wait until every other participating process has attached to the
|
||||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user