Skip to content

Commit 9d4afcb

Browse files
committed
Use mpi_free_mem for mem allocated via mpi_alloc.
While mpich and openmpi do not care whether memory allocated with MPI_Alloc_mem is freed using free() or MPI_Free_mem, the intel MPI lib crashes when not being in sync there. Therefore use MPI_Free_mem for all memory allocate using MPI_Alloc_mem.
1 parent 8d939f1 commit 9d4afcb

File tree

1 file changed

+14
-7
lines changed

1 file changed

+14
-7
lines changed

src/runtime-libraries/mpi/mpi_caf.c

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1040,9 +1040,11 @@ finalize_internal(int status_code)
10401040
{
10411041
ierr = MPI_Win_detach(global_dynamic_win, cur_stok->token->memptr);
10421042
chk_err(ierr);
1043-
free(cur_stok->token->memptr);
1043+
ierr = MPI_Free_mem(cur_stok->token->memptr);
1044+
chk_err(ierr);
10441045
}
1045-
free(cur_stok->token);
1046+
ierr = MPI_Free_mem(cur_stok->token);
1047+
chk_err(ierr);
10461048
free(cur_stok);
10471049
cur_stok = prev_stok;
10481050
}
@@ -1065,10 +1067,13 @@ finalize_internal(int status_code)
10651067
#ifdef GCC_GE_7
10661068
/* Unregister the window to the descriptors when freeing the token. */
10671069
dprint("MPI_Win_free(%p)\n", p);
1068-
ierr = MPI_Win_free(p); chk_err(ierr);
1069-
free(cur_tok->token);
1070+
ierr = MPI_Win_free(p);
1071+
chk_err(ierr);
1072+
ierr = MPI_Free_mem(cur_tok->token);
1073+
chk_err(ierr);
10701074
#else // GCC_GE_7
1071-
ierr = MPI_Win_free(p); chk_err(ierr);
1075+
ierr = MPI_Win_free(p);
1076+
chk_err(ierr);
10721077
#endif // GCC_GE_7
10731078
free(cur_tok);
10741079
cur_tok = prev;
@@ -1529,7 +1534,8 @@ PREFIX(deregister) (caf_token_t *token, int *stat, char *errmsg,
15291534
{
15301535
ierr = MPI_Win_detach(global_dynamic_win, slave_token->memptr);
15311536
chk_err(ierr);
1532-
free(slave_token->memptr);
1537+
ierr = MPI_Free_mem(slave_token->memptr);
1538+
chk_err(ierr);
15331539
slave_token->memptr = NULL;
15341540
if (type == CAF_DEREGTYPE_COARRAY_DEALLOCATE_ONLY)
15351541
{
@@ -1546,7 +1552,8 @@ PREFIX(deregister) (caf_token_t *token, int *stat, char *errmsg,
15461552
caf_allocated_slave_tokens = prev_stok;
15471553

15481554
free(cur_stok);
1549-
free(*token);
1555+
ierr = MPI_Free_mem(*token);
1556+
chk_err(ierr);
15501557
return;
15511558
}
15521559

0 commit comments

Comments
 (0)