[mpich2-commits] r5505 - in mpich2/trunk/src: mpi/attr mpid/ch3/src

goodell at mcs.anl.gov goodell at mcs.anl.gov
Tue Oct 20 15:35:39 CDT 2009


Author: goodell
Date: 2009-10-20 15:35:39 -0500 (Tue, 20 Oct 2009)
New Revision: 5505

Modified:
   mpich2/trunk/src/mpi/attr/attrutil.c
   mpich2/trunk/src/mpid/ch3/src/ch3u_rma_ops.c
   mpich2/trunk/src/mpid/ch3/src/mpid_vc.c
Log:
Twiddle some ref counting to keep valgrind happy.

These were not strictly bugs, but by keeping valgrind happy we greatly
improve its usefulness for debugging.

No reviewer.

Modified: mpich2/trunk/src/mpi/attr/attrutil.c
===================================================================
--- mpich2/trunk/src/mpi/attr/attrutil.c	2009-10-20 20:35:38 UTC (rev 5504)
+++ mpich2/trunk/src/mpi/attr/attrutil.c	2009-10-20 20:35:39 UTC (rev 5505)
@@ -38,7 +38,11 @@
 /* Provides a way to trap all attribute allocations when debugging leaks. */
 MPID_Attribute *MPID_Attr_alloc(void)
 {
-    return (MPID_Attribute *)MPIU_Handle_obj_alloc(&MPID_Attr_mem);
+    MPID_Attribute *attr = (MPID_Attribute *)MPIU_Handle_obj_alloc(&MPID_Attr_mem);
+    /* attributes don't have refcount semantics, but let's keep valgrind and
+     * the debug logging pacified */
+    MPIU_Object_set_ref(attr, 0);
+    return attr;
 }
 
 void MPID_Attr_free(MPID_Attribute *attr_ptr)

Modified: mpich2/trunk/src/mpid/ch3/src/ch3u_rma_ops.c
===================================================================
--- mpich2/trunk/src/mpid/ch3/src/ch3u_rma_ops.c	2009-10-20 20:35:38 UTC (rev 5504)
+++ mpich2/trunk/src/mpid/ch3/src/ch3u_rma_ops.c	2009-10-20 20:35:39 UTC (rev 5505)
@@ -40,6 +40,8 @@
     *win_ptr = (MPID_Win *)MPIU_Handle_obj_alloc( &MPID_Win_mem );
     MPIU_ERR_CHKANDJUMP(!(*win_ptr),mpi_errno,MPI_ERR_OTHER,"**nomem");
 
+    MPIU_Object_set_ref(*win_ptr, 1);
+
     (*win_ptr)->fence_cnt = 0;
     (*win_ptr)->base = base;
     (*win_ptr)->size = size;
@@ -121,6 +123,7 @@
 {
     int mpi_errno=MPI_SUCCESS, total_pt_rma_puts_accs, i, *recvcnts, comm_size;
     MPID_Comm *comm_ptr;
+    int in_use;
     MPIU_CHKLMEM_DECL(1);
     MPIU_THREADPRIV_DECL;
     
@@ -166,15 +169,17 @@
     }
 
     NMPI_Comm_free(&((*win_ptr)->comm));
-        
+
     MPIU_Free((*win_ptr)->base_addrs);
     MPIU_Free((*win_ptr)->disp_units);
     MPIU_Free((*win_ptr)->all_win_handles);
     MPIU_Free((*win_ptr)->pt_rma_puts_accs);
-        
-    /* check whether refcount needs to be decremented here as in group_free */
+
+    MPIU_Object_release_ref(*win_ptr, &in_use);
+    /* MPI windows don't have reference count semantics, so this should always be true */
+    MPIU_Assert(!in_use);
     MPIU_Handle_obj_free( &MPID_Win_mem, *win_ptr );
-        
+
  fn_exit:
     MPIR_Nest_decr();
     MPIU_CHKLMEM_FREEALL();

Modified: mpich2/trunk/src/mpid/ch3/src/mpid_vc.c
===================================================================
--- mpich2/trunk/src/mpid/ch3/src/mpid_vc.c	2009-10-20 20:35:38 UTC (rev 5504)
+++ mpich2/trunk/src/mpid/ch3/src/mpid_vc.c	2009-10-20 20:35:39 UTC (rev 5505)
@@ -77,8 +77,8 @@
     MPIDI_FUNC_ENTER(MPID_STATE_MPID_VCRT_CREATE);
 
     MPIU_CHKPMEM_MALLOC(vcrt, MPIDI_VCRT_t *, sizeof(MPIDI_VCRT_t) + (size - 1) * sizeof(MPIDI_VC_t *),	mpi_errno, "**nomem");
+    vcrt->handle = HANDLE_SET_KIND(0, HANDLE_KIND_INVALID);
     MPIU_Object_set_ref(vcrt, 1);
-    vcrt->handle = HANDLE_SET_KIND(0, HANDLE_KIND_INVALID);
     vcrt->size = size;
     *vcrt_ptr = vcrt;
 
@@ -703,8 +703,8 @@
 int MPIDI_VC_Init( MPIDI_VC_t *vc, MPIDI_PG_t *pg, int rank )
 {
     vc->state = MPIDI_VC_STATE_INACTIVE;
+    vc->handle  = HANDLE_SET_MPI_KIND(0, MPID_VCONN);
     MPIU_Object_set_ref(vc, 0);
-    vc->handle  = MPID_VCONN;
     vc->pg      = pg;
     vc->pg_rank = rank;
     vc->lpid    = lpid_counter++;



More information about the mpich2-commits mailing list