<p dir="ltr">It won't print out the threadcomm, which is the point.</p>
<div class="gmail_quote">On Dec 8, 2012 10:19 AM, "Shri" <<a href="mailto:abhyshr@hawk.iit.edu">abhyshr@hawk.iit.edu</a>> wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Will this work for threadcomm since it is not a PetscObject?<br>
<br>
Shri<br>
On Dec 8, 2012, at 11:56 AM, Barry Smith wrote:<br>
<br>
><br>
>   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.<br>
><br>
>   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.<br>
><br>
>    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).<br>

><br>
>   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.<br>
><br>
>    Barry<br>
><br>
> On Dec 8, 2012, at 9:29 AM, Jed Brown <<a href="mailto:jedbrown@mcs.anl.gov">jedbrown@mcs.anl.gov</a>> wrote:<br>
><br>
>> threadcomm.c has this thing<br>
>><br>
>>  for (i=0;i<PETSC_KERNELS_MAX;i++) {<br>
>>    ierr = PetscNew(struct _p_PetscThreadCommJobCtx,&PetscJobQueue->jobs[i]);CHKERRQ(ierr);<br>
>><br>
>><br>
>> 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<br>

>><br>
>> 1. not log this memory at all by calling malloc or posix_memalign directly<br>
>><br>
>> 2. put code into PetscFinalize that ensures that this stuff has been freed (very messy if user does anything weird with communicators)<br>
>><br>
>> 3. add way to mark PetscTrMalloc'd memory as "indirect" so that it is not reported by default<br>
><br>
<br>
</blockquote></div>