On Dec 8, 2012, at 12:13 PM, Jed Brown <jedbrown at mcs.anl.gov> wrote:

> Sounds good to me.

   Note if we somehow specially mark a malloc in the creation of PetscHeader we 
may not even need to have a separate data structure for keeping track of object 
mallocs. Just have a special PetscMallocDump() type of function that only 
prints the stacks for each new object (and not for every malloc).

    Barry

> 
> 
> On Sat, Dec 8, 2012 at 9:56 AM, Barry Smith <bsmith at mcs.anl.gov> wrote:
> 
>    I don't think any of these three things are reasonable approaches. You are 
> basically saying we should not log some memory usage because it is annoying.
> 
>    Much better is to have something in addition to -malloc_dump (say 
> -object_dump) that is more useful. Currently -malloc_dump is a cumbersome way 
> of determining which objects has not be freed.
> 
>     I propose an alternative:   every PetscHeaderCreate() log all the stack 
> frames at which it is called and a list of all objects be maintained, any 
> objects that are not destroyed can have their creation stack frames printed 
> at the end making it easy to find the objects that were not destroyed. Then 
> we will not recommend regular users use -malloc_dump (and that is reserved 
> for us and will continue to log everything properly).
> 
>    Note that PetscHeaderCreate() uses PetscLogObjectCreate() which can use 
> PetscLogPHC() (stupid name) but is apparently now a black hole. We can just 
> rework PetscLogObjectCreate() to save the stack frames.
> 
>     Barry
> 
> On Dec 8, 2012, at 9:29 AM, Jed Brown <jedbrown at mcs.anl.gov> wrote:
> 
> > threadcomm.c has this thing
> >
> >   for (i=0;i<PETSC_KERNELS_MAX;i++) {
> >     ierr = PetscNew(struct 
> > _p_PetscThreadCommJobCtx,&PetscJobQueue->jobs[i]);CHKERRQ(ierr);
> >
> >
> > that gets freed when the last PetscObject gets destroyed. But if the user 
> > forgets to Destroy something, this shows up as a memory leak. Since the 
> > relevant malloc_dump output is much higher in the stack, this is confusing 
> > noise, and I'd like to eliminate it. We can either
> >
> > 1. not log this memory at all by calling malloc or posix_memalign directly
> >
> > 2. put code into PetscFinalize that ensures that this stuff has been freed 
> > (very messy if user does anything weird with communicators)
> >
> > 3. add way to mark PetscTrMalloc'd memory as "indirect" so that it is not 
> > reported by default
> 
> 

Reply via email to