@@ -1034,14 +1034,17 @@ finalize_internal(int status_code)
1034
1034
while (cur_stok )
1035
1035
{
1036
1036
prev_stok = cur_stok -> prev ;
1037
- ierr = MPI_Win_detach (global_dynamic_win , cur_stok ); chk_err (ierr );
1037
+ dprint ("freeing slave token %p for memory %p" , cur_stok -> token , cur_stok -> token -> memptr );
1038
+ ierr = MPI_Win_detach (global_dynamic_win , cur_stok -> token ); chk_err (ierr );
1038
1039
if (cur_stok -> token -> memptr )
1039
1040
{
1040
1041
ierr = MPI_Win_detach (global_dynamic_win , cur_stok -> token -> memptr );
1041
1042
chk_err (ierr );
1042
- free (cur_stok -> token -> memptr );
1043
+ ierr = MPI_Free_mem (cur_stok -> token -> memptr );
1044
+ chk_err (ierr );
1043
1045
}
1044
- free (cur_stok -> token );
1046
+ ierr = MPI_Free_mem (cur_stok -> token );
1047
+ chk_err (ierr );
1045
1048
free (cur_stok );
1046
1049
cur_stok = prev_stok ;
1047
1050
}
@@ -1064,10 +1067,13 @@ finalize_internal(int status_code)
1064
1067
#ifdef GCC_GE_7
1065
1068
/* Unregister the window to the descriptors when freeing the token. */
1066
1069
dprint ("MPI_Win_free(%p)\n" , p );
1067
- ierr = MPI_Win_free (p ); chk_err (ierr );
1068
- 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 );
1069
1074
#else // GCC_GE_7
1070
- ierr = MPI_Win_free (p ); chk_err (ierr );
1075
+ ierr = MPI_Win_free (p );
1076
+ chk_err (ierr );
1071
1077
#endif // GCC_GE_7
1072
1078
free (cur_tok );
1073
1079
cur_tok = prev ;
@@ -1213,7 +1219,7 @@ PREFIX(register) (size_t size, caf_register_t type, caf_token_t *token,
1213
1219
struct caf_allocated_slave_tokens_t * tmp =
1214
1220
malloc (sizeof (struct caf_allocated_slave_tokens_t ));
1215
1221
tmp -> prev = caf_allocated_slave_tokens ;
1216
- tmp -> token = * token ;
1222
+ tmp -> token = slave_token ;
1217
1223
caf_allocated_slave_tokens = tmp ;
1218
1224
}
1219
1225
else // (type == CAF_REGTYPE_COARRAY_ALLOC_ALLOCATE_ONLY)
@@ -1528,7 +1534,8 @@ PREFIX(deregister) (caf_token_t *token, int *stat, char *errmsg,
1528
1534
{
1529
1535
ierr = MPI_Win_detach (global_dynamic_win , slave_token -> memptr );
1530
1536
chk_err (ierr );
1531
- free (slave_token -> memptr );
1537
+ ierr = MPI_Free_mem (slave_token -> memptr );
1538
+ chk_err (ierr );
1532
1539
slave_token -> memptr = NULL ;
1533
1540
if (type == CAF_DEREGTYPE_COARRAY_DEALLOCATE_ONLY )
1534
1541
{
@@ -1545,7 +1552,8 @@ PREFIX(deregister) (caf_token_t *token, int *stat, char *errmsg,
1545
1552
caf_allocated_slave_tokens = prev_stok ;
1546
1553
1547
1554
free (cur_stok );
1548
- free (* token );
1555
+ ierr = MPI_Free_mem (* token );
1556
+ chk_err (ierr );
1549
1557
return ;
1550
1558
}
1551
1559
0 commit comments