Example #1
0
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;
}
Example #2
0
static void tMPI_Global_destroy(struct tmpi_global *g)
{
    tMPI_Thread_mutex_destroy(&(g->timer_mutex));
}
Example #3
0
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;
}
Example #4
0
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));
}