[petsc-dev] threadcomm memory leak

Jed Brown jedbrown at mcs.anl.gov
Mon Jul 16 22:48:07 CDT 2012


On Mon, Jul 16, 2012 at 10:44 PM, Barry Smith <bsmith at mcs.anl.gov> wrote:

>   /* PETSC_COMM_SELF = PETSC_COMM_WORLD for MPIUNI */
> #if !defined(PETSC_HAVE_MPIUNI)
>   ierr =
> PetscCommDuplicate(PETSC_COMM_WORLD,&icomm,PETSC_NULL);CHKERRQ(ierr);
>   ierr =
> MPI_Attr_put(icomm,Petsc_ThreadComm_keyval,(void*)tcomm);CHKERRQ(ierr);
>   tcomm->refct++;               /* Share the threadcomm with
> PETSC_COMM_SELF */
> #endif
>
>   ierr =
> PetscCommDuplicate(PETSC_COMM_SELF,&icomm,PETSC_NULL);CHKERRQ(ierr);
>   ierr =
> MPI_Attr_put(icomm,Petsc_ThreadComm_keyval,(void*)tcomm);CHKERRQ(ierr);
>
>
>   I would not do it this way. Instead I would write a general routine that
> attached a threadcomm to a MPI_Comm; this routine would get the
> threadcomm_keyval and if it did NOT find it then would be put the
> attribute, otherwise it would know one was already there. Say it is called
> PetscThreadCommAttach(MPI_Comm, threadcomm); then in this routine you would
> just write
>
>     PetscThreadCommAttach(PETSC_COMM_WORLD, tcomm);
>     PetscThreadCommAttach(PETSC_COMM_SELF,tcomm);        /* won't attr it
> again for MPIUni because it is already there */
>

This looks good, but there is also a ref-counting check needed in
PetscThreadCommDetach/Destroy because the thread pool (presumably) needs to
be closed before PetscFinalize returns.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20120716/0f68a3a9/attachment.html>


More information about the petsc-dev mailing list