int tMPI_Thread_barrier_destroy(tMPI_Thread_barrier_t *barrier) { if(barrier==NULL) { return EINVAL; } #if 0 DeleteCriticalSection(&(barrier->barrierp->cs)); #else tMPI_Thread_mutex_destroy(&(barrier->barrierp->cs)); #endif tMPI_Thread_cond_destroy(&(barrier->barrierp->cv)); free(barrier->barrierp); return 0; }
static void tMPI_Global_destroy(struct tmpi_global *g) { tMPI_Thread_mutex_destroy(&(g->timer_mutex)); }
int tMPI_Comm_destroy(tMPI_Comm comm, tmpi_bool do_link_lock) { int i; int ret; free(comm->grp.peers); for (i = 0; i < comm->N_reduce_iter; i++) { free(comm->reduce_barrier[i]); } free(comm->reduce_barrier); free(comm->N_reduce); for (i = 0; i < N_COLL_ENV; i++) { tMPI_Coll_env_destroy( &(comm->cev[i]) ); } for (i = 0; i < comm->grp.N; i++) { tMPI_Coll_sync_destroy( &(comm->csync[i]) ); } free(comm->cev); free(comm->csync); ret = tMPI_Thread_mutex_destroy( &(comm->comm_create_lock) ); if (ret != 0) { return tMPI_Error(TMPI_COMM_WORLD, TMPI_ERR_IO); } ret = tMPI_Thread_cond_destroy( &(comm->comm_create_prep) ); if (ret != 0) { return tMPI_Error(TMPI_COMM_WORLD, TMPI_ERR_IO); } ret = tMPI_Thread_cond_destroy( &(comm->comm_create_finish) ); if (ret != 0) { return tMPI_Error(TMPI_COMM_WORLD, TMPI_ERR_IO); } free((void*)comm->reduce_sendbuf); free((void*)comm->reduce_recvbuf); if (comm->cart) { tMPI_Cart_destroy( comm->cart ); free(comm->cart); } /* remove ourselves from the circular list */ if (do_link_lock) { ret = tMPI_Thread_mutex_lock( &(tmpi_global->comm_link_lock) ); if (ret != 0) { return tMPI_Error(TMPI_COMM_WORLD, TMPI_ERR_IO); } } if (comm->next) { comm->next->prev = comm->prev; } if (comm->prev) { comm->prev->next = comm->next; } free(comm); if (do_link_lock) { ret = tMPI_Thread_mutex_unlock( &(tmpi_global->comm_link_lock) ); if (ret != 0) { return tMPI_Error(TMPI_COMM_WORLD, TMPI_ERR_IO); } } return TMPI_SUCCESS; }
static void tMPI_Global_destroy(struct tmpi_global *g) { tMPI_Thread_barrier_destroy(&(g->barrier)); tMPI_Thread_mutex_destroy(&(g->timer_mutex)); tMPI_Thread_mutex_destroy(&(g->comm_link_lock)); }