@@ -1034,14 +1034,17 @@ finalize_internal(int status_code)
10341034 while (cur_stok )
10351035 {
10361036 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 );
10381039 if (cur_stok -> token -> memptr )
10391040 {
10401041 ierr = MPI_Win_detach (global_dynamic_win , cur_stok -> token -> memptr );
10411042 chk_err (ierr );
1042- free (cur_stok -> token -> memptr );
1043+ ierr = MPI_Free_mem (cur_stok -> token -> memptr );
1044+ chk_err (ierr );
10431045 }
1044- free (cur_stok -> token );
1046+ ierr = MPI_Free_mem (cur_stok -> token );
1047+ chk_err (ierr );
10451048 free (cur_stok );
10461049 cur_stok = prev_stok ;
10471050 }
@@ -1064,10 +1067,13 @@ finalize_internal(int status_code)
10641067#ifdef GCC_GE_7
10651068 /* Unregister the window to the descriptors when freeing the token. */
10661069 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 );
10691074#else // GCC_GE_7
1070- ierr = MPI_Win_free (p ); chk_err (ierr );
1075+ ierr = MPI_Win_free (p );
1076+ chk_err (ierr );
10711077#endif // GCC_GE_7
10721078 free (cur_tok );
10731079 cur_tok = prev ;
@@ -1213,7 +1219,7 @@ PREFIX(register) (size_t size, caf_register_t type, caf_token_t *token,
12131219 struct caf_allocated_slave_tokens_t * tmp =
12141220 malloc (sizeof (struct caf_allocated_slave_tokens_t ));
12151221 tmp -> prev = caf_allocated_slave_tokens ;
1216- tmp -> token = * token ;
1222+ tmp -> token = slave_token ;
12171223 caf_allocated_slave_tokens = tmp ;
12181224 }
12191225 else // (type == CAF_REGTYPE_COARRAY_ALLOC_ALLOCATE_ONLY)
@@ -1528,7 +1534,8 @@ PREFIX(deregister) (caf_token_t *token, int *stat, char *errmsg,
15281534 {
15291535 ierr = MPI_Win_detach (global_dynamic_win , slave_token -> memptr );
15301536 chk_err (ierr );
1531- free (slave_token -> memptr );
1537+ ierr = MPI_Free_mem (slave_token -> memptr );
1538+ chk_err (ierr );
15321539 slave_token -> memptr = NULL ;
15331540 if (type == CAF_DEREGTYPE_COARRAY_DEALLOCATE_ONLY )
15341541 {
@@ -1545,7 +1552,8 @@ PREFIX(deregister) (caf_token_t *token, int *stat, char *errmsg,
15451552 caf_allocated_slave_tokens = prev_stok ;
15461553
15471554 free (cur_stok );
1548- free (* token );
1555+ ierr = MPI_Free_mem (* token );
1556+ chk_err (ierr );
15491557 return ;
15501558 }
15511559
0 commit comments