This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "MPICH primary repository". The branch, master has been updated via ff16f6f65cc4b92b37947bc3755f8bf129163f85 (commit) via 974d50299cbcf2fd909d6b9a5d7d13f2a3c0a9c3 (commit) from c73c33196510911bd99ffbadcf04d1290e651d4d (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- http://git.mpich.org/mpich.git/commitdiff/ff16f6f65cc4b92b37947bc3755f8bf129... commit ff16f6f65cc4b92b37947bc3755f8bf129163f85 Author: Bob Cernohous <[email protected]> Date: Tue Oct 15 10:39:32 2013 -0500 Free the builtin communicators (world/self/iworld) Also, do not reserve the internal-only copy of comm world context id when it isn't being used (MPID_NEEDS_ICOMM_WORLD) See mpich.org ticket #1947 closes #1947 (ibm) 984acc33d6c8149987016b62da5afb36450be94e Signed-off-by: Michael Blocksome <[email protected]> Signed-off-by: Rob Latham <[email protected]> diff --git a/src/mpid/pamid/src/mpid_finalize.c b/src/mpid/pamid/src/mpid_finalize.c index 82da86f..10d8dce 100644 --- a/src/mpid/pamid/src/mpid_finalize.c +++ b/src/mpid/pamid/src/mpid_finalize.c @@ -99,6 +99,13 @@ int MPID_Finalize() PAMIX_Finalize(MPIDI_Client); +#ifdef MPID_NEEDS_ICOMM_WORLD + MPIR_Comm_release_always(MPIR_Process.icomm_world, 0); +#endif + + MPIR_Comm_release_always(MPIR_Process.comm_self,0); + MPIR_Comm_release_always(MPIR_Process.comm_world,0); + rc = PAMI_Context_destroyv(MPIDI_Context, MPIDI_Process.avail_contexts); MPID_assert_always(rc == PAMI_SUCCESS); http://git.mpich.org/mpich.git/commitdiff/974d50299cbcf2fd909d6b9a5d7d13f2a3... commit 974d50299cbcf2fd909d6b9a5d7d13f2a3c0a9c3 Author: Haizhu Liu <[email protected]> Date: Fri Oct 11 10:48:18 2013 -0400 Fix Memory leak due to dynamic task change Signed-off-by: Michael Blocksome <[email protected]> Signed-off-by: Rob Latham <[email protected]> diff --git a/src/mpid/pamid/src/dyntask/mpidi_pg.c b/src/mpid/pamid/src/dyntask/mpidi_pg.c index f59890d..7d59b3a 100644 --- a/src/mpid/pamid/src/dyntask/mpidi_pg.c +++ b/src/mpid/pamid/src/dyntask/mpidi_pg.c @@ -204,11 +204,11 @@ int MPIDI_PG_Finalize(void) fails to use MPI_Comm_disconnect on communicators that were created with the dynamic process routines.*/ /* XXX DJG FIXME-MT should we be checking this? */ - if (MPIU_Object_get_ref(pg) == 0 || 1) { + if (MPIU_Object_get_ref(pg) == 0 ) { if (pg == MPIDI_Process.my_pg) MPIDI_Process.my_pg = NULL; - MPIU_Object_set_ref(pg, 0); /* satisfy assertions in PG_Destroy */ - MPIDI_PG_Destroy( pg ); + MPIU_Object_set_ref(pg, 0); /* satisfy assertions in PG_Destroy */ + MPIDI_PG_Destroy( pg ); } pg = pgNext; } @@ -218,10 +218,9 @@ int MPIDI_PG_Finalize(void) point is that comm_world (and comm_self) still exist, and hence the usual process to free the related VC structures will not be invoked. */ - if (MPIDI_Process.my_pg) { - MPIDI_PG_Destroy(MPIDI_Process.my_pg); - } - MPIDI_Process.my_pg = NULL; + + /* The process group associated with MPI_COMM_WORLD will be + freed when MPI_COMM_WORLD is freed */ return mpi_errno; } diff --git a/src/mpid/pamid/src/dyntask/mpidi_port.c b/src/mpid/pamid/src/dyntask/mpidi_port.c index fcdbee1..2488ed6 100644 --- a/src/mpid/pamid/src/dyntask/mpidi_port.c +++ b/src/mpid/pamid/src/dyntask/mpidi_port.c @@ -693,10 +693,6 @@ int MPIDI_Comm_connect(const char *port_name, MPID_Info *info, int root, } TRACE_ERR("connect:free new vc\n"); - /* Free new_vc. It was explicitly allocated in MPIDI_Connect_to_root.*/ - if (rank == root) { - MPIU_Free( new_vc); - } fn_exit: if(local_translation) MPIU_Free(local_translation); @@ -1350,11 +1346,6 @@ int MPIDI_Comm_accept(const char *port_name, MPID_Info *info, int root, TRACE_ERR("MPIR_Barrier_intra returned with mpi_errno=%d\n", mpi_errno); } - /* Free new_vc once the connection is completed. */ - if (rank == root) { - MPIU_Free( new_vc ); - } - fn_exit: if(local_translation) MPIU_Free(local_translation); return mpi_errno; diff --git a/src/mpid/pamid/src/mpid_init.c b/src/mpid/pamid/src/mpid_init.c index 5a63d44..6abb609 100644 --- a/src/mpid/pamid/src/mpid_init.c +++ b/src/mpid/pamid/src/mpid_init.c @@ -1246,9 +1246,6 @@ int MPID_Init(int * argc, * for getting the business card */ MPIDI_Process.my_pg_rank = pg_rank; - /* FIXME: Why do we add a ref to pg here? */ - TRACE_ERR("Adding ref pg=%x\n", pg); - MPIDI_PG_add_ref(pg); } #endif diff --git a/src/mpid/pamid/src/mpid_vc.c b/src/mpid/pamid/src/mpid_vc.c index a49f3a8..7a22133 100644 --- a/src/mpid/pamid/src/mpid_vc.c +++ b/src/mpid/pamid/src/mpid_vc.c @@ -34,7 +34,7 @@ struct MPIDI_VCRT { MPIU_OBJECT_HEADER; unsigned size; /**< Number of entries in the table */ - MPID_VCR vcr_table[0]; /**< Array of virtual connection references */ + MPID_VCR *vcr_table; /**< Array of virtual connection references */ }; @@ -48,7 +48,11 @@ int MPID_VCR_Dup(MPID_VCR orig_vcr, MPID_VCR * new_vcr) } #endif - *new_vcr = orig_vcr; + (*new_vcr)->taskid = orig_vcr->taskid; +#ifdef DYNAMIC_TASKING + (*new_vcr)->pg_rank = orig_vcr->pg_rank; + (*new_vcr)->pg = orig_vcr->pg; +#endif return MPI_SUCCESS; } @@ -63,9 +67,12 @@ int MPID_VCRT_Create(int size, MPID_VCRT *vcrt_ptr) struct MPIDI_VCRT * vcrt; int i,result; - vcrt = MPIU_Malloc(sizeof(struct MPIDI_VCRT) + size*sizeof(MPID_VCR)); - for(i = 0; i < size; i++) + vcrt = MPIU_Malloc(sizeof(struct MPIDI_VCRT)); + vcrt->vcr_table = MPIU_Malloc(size*sizeof(MPID_VCR)); + + for(i = 0; i < size; i++) { vcrt->vcr_table[i] = MPIU_Malloc(sizeof(struct MPID_VCR_t)); + } if (vcrt != NULL) { MPIU_Object_set_ref(vcrt, 1); @@ -98,17 +105,17 @@ int MPID_VCRT_Release(MPID_VCRT vcrt, int isDisconnect) for (i = 0; i < vcrt->size; i++) { MPID_VCR const vcr = vcrt->vcr_table[i]; + if (vcr->pg == MPIDI_Process.my_pg && vcr->pg_rank == MPIDI_Process.my_pg_rank) { TRACE_ERR("before MPIDI_PG_release_ref on vcr=%x pg=%x pg=%s inuse=%d\n", vcr, vcr->pg, (vcr->pg)->id, inuse); inuse=MPIU_Object_get_ref(vcr->pg); - TRACE_ERR("before MPIDI_PG_release_ref on vcr=%x pg=%x pg=%s inuse=%d\n", vcr, vcr->pg, (vcr->pg)->id, inuse); MPIDI_PG_release_ref(vcr->pg, &inuse); - TRACE_ERR("MPIDI_PG_release_ref on pg=%s inuse=%d\n", (vcr->pg)->id, inuse); if (inuse == 0) { MPIDI_PG_Destroy(vcr->pg); + MPIU_Free(vcr); } continue; } @@ -117,11 +124,21 @@ int MPID_VCRT_Release(MPID_VCRT vcrt, int isDisconnect) MPIDI_PG_release_ref(vcr->pg, &inuse); if (inuse == 0) MPIDI_PG_Destroy(vcr->pg); - /*MPIU_Free(vcrt->vcr_table[i]);*/ + if(vcr) MPIU_Free(vcr); } + MPIU_Free(vcrt->vcr_table); } /** CHECK */ + else { + for (i = 0; i < vcrt->size; i++) + MPIU_Free(vcrt->vcr_table[i]); + MPIU_Free(vcrt->vcr_table);vcrt->vcr_table=NULL; + } +#else + for (i = 0; i < vcrt->size; i++) + MPIU_Free(vcrt->vcr_table[i]); + MPIU_Free(vcrt->vcr_table);vcrt->vcr_table=NULL; #endif - MPIU_Free(vcrt); + MPIU_Free(vcrt);vcrt=NULL; } return MPI_SUCCESS; } ----------------------------------------------------------------------- Summary of changes: src/mpid/pamid/src/dyntask/mpidi_pg.c | 13 +++++------ src/mpid/pamid/src/dyntask/mpidi_port.c | 9 -------- src/mpid/pamid/src/mpid_finalize.c | 7 ++++++ src/mpid/pamid/src/mpid_init.c | 3 -- src/mpid/pamid/src/mpid_vc.c | 33 +++++++++++++++++++++++------- 5 files changed, 38 insertions(+), 27 deletions(-) hooks/post-receive -- MPICH primary repository