Hi:

On Mon, Jun 16, 2008 at 10:26 AM, Brad Nicholes <[EMAIL PROTECTED]> wrote:

>   This isn't the right thing to do.  It leaves the gmetric memory allocation 
> coming from two different pools with no way to clean it up completely.  It 
> actually introduces a memory leak.  See my comments in the bug 
> (http://bugzilla.ganglia.info/cgi-bin/bugzilla/show_bug.cgi?id=190).  A 
> gmetric represents a single transaction.  It must be created, set, used and 
> destroyed.  This needs to be reverted to r1386.
>
> Brad
>
>>>> On 6/13/2008 at 5:20 PM, in message
> <[EMAIL PROTECTED]>,
> <[EMAIL PROTECTED]> wrote:
>> Revision: 1411
>>           http://ganglia.svn.sourceforge.net/ganglia/?rev=1411&view=rev
>> Author:   bernardli
>> Date:     2008-06-13 16:20:32 -0700 (Fri, 13 Jun 2008)
>>
>> Log Message:
>> -----------
>> Fix potential memory leak and segmentation fault caused by misuse of APR
>> memory pool (bugzilla #190).
>>
>> Submitted-by: Masaaki HIROSE <[EMAIL PROTECTED]>
>> Reviewed-by: Bernard Li <[EMAIL PROTECTED]>
>>
>> Modified Paths:
>> --------------
>>     trunk/monitor-core/lib/libgmond.c
>>
>> Modified: trunk/monitor-core/lib/libgmond.c
>> ===================================================================
>> --- trunk/monitor-core/lib/libgmond.c 2008-06-13 15:49:40 UTC (rev 1410)
>> +++ trunk/monitor-core/lib/libgmond.c 2008-06-13 23:20:32 UTC (rev 1411)
>> @@ -368,21 +368,19 @@
>>      {
>>        return NULL;
>>      }
>> -  gmetric = apr_pcalloc( pool, sizeof(struct Ganglia_metric));
>> +  gmetric = apr_pcalloc( parent_pool, sizeof(struct Ganglia_metric));
>>    if(!gmetric)
>>      {
>> -      Ganglia_pool_destroy((Ganglia_pool)pool);
>>        return NULL;
>>      }
>>
>>    gmetric->pool = (Ganglia_pool)pool;
>> -  gmetric->msg  = apr_pcalloc( pool, sizeof(struct 
>> Ganglia_metadata_message));
>> +  gmetric->msg  = apr_pcalloc( parent_pool, sizeof(struct
>> Ganglia_metadata_message));
>>    if(!gmetric->msg)
>>      {
>> -      Ganglia_pool_destroy((Ganglia_pool)pool);
>>        return NULL;
>>      }
>> -  gmetric->extra = (void*)apr_table_make(pool, 2);
>> +  gmetric->extra = (void*)apr_table_make(parent_pool, 2);
>>
>>    return gmetric;
>>  }
>>

I can revert this if Carlo has no issues.  Sorry for the "bad" check-in.

Cheers,

Bernard

-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
Ganglia-developers mailing list
Ganglia-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/ganglia-developers

Reply via email to