[AGENT++] Memory leak inside a MibTable?

Frank Fock fock at agentpp.com
Wed Nov 10 16:55:26 CET 2004


Hi Thorsten,

the generator row (a MibTableRow instance) is a member of
MibTable and is therefore destroyed at the end of ~MibTable().

MibTableRow has a member row which is an OrderedArray which
extends Array. In the destructor of Array, the elements and the
array are deleted.

So I do not think that there is a memory leak here.

Best regards,
Frank

Petersen, Thorsten wrote:

>Hello
>
> 
>
>I'm using a class derived from MibTable, e., g. "class Table : public MibTable", 
>
> 
>
>After construction of an instance of that type I add the table to our MIB: 
>
> 
>
>      Table table = new table( oid,...) ;
>
>      getMib()->add( table ) ...
>
> 
>
>Shortly later, I defined the columns and use the add_col method of MibTable for instances of type derived from MibLeaf : "class Leaf : public MibLeaf"
>
> 
>
>       Leaf   tempLeaf = new Leaf(  ... );
>
>       table->add_col(tempLeaf)
>
> 
>
>More column definitions follow , and I call the getMib()->init() and everything works fine. Note: As far as I understood, the column definitions are stored inside the "generator" member of class MibTable
>
> 
>
>class MibTable ...
>
> 
>
>      MibTableRow    generator;
>
> 
>
>But when I remove the table from the MIB with "getMib()->remove( oid )"  where oid is the object id of the table mentioned above, the destructor of the class MibTable  is called, but the leafs defining the columns are not destroyed. A look at the code of the library shows that the member "generator" is not used there.
>
> 
>
>MibTable::~MibTable()
>
>{
>
>      if (index_struc) delete[] index_struc;
>
>      // listeners are just pointers, so do not delete them here
>
>      listeners.clear();
>
>      voters.clear();
>
>}
>
> 
>
>Unfortunately, the destructor of class MibTableRow does nothing on the stored leaf pointers as well.
>
> 
>
>MibTableRow::~MibTableRow()
>
>{
>
>}
>
> 
>
>As a consequence, I'm removing the column definitions prior to the removal of the table, otherwise this will lead to a memory leak.
>
> 
>
>       Table * table = static_cast<Table*>( ( getMib() )->get( oid ) );
>
> 
>
>       if( table )
>
>       {
>
>           table->clear();
>
>           MibTableRow * columnTemplate = table->get_columns();
>
>           if(columnTemplate)
>
>           {
>
>               const int columnNumber = columnTemplate->size();
>
>               for( int i = columnNumber - 1; i >= 0 ; i-- )
>
>               {
>
>                   columnTemplate->remove( i );
>
>               }
>
>           }
>
>       }
>
>       ...
>
>       m_context->getMib() )->remove( oid )
>
> 
>
>I think, removing stored leafs could be done within the destructor of class MibTableRow as well. Are there reasons that prevent to delete the stored leafs inside the destructor of class MibTableRow?
>
> 
>
>With kind regards, 
>
>Thorsten Petersen
>
> 
>
> 
>
>------------------------------------------------------------------ 
>Important Note 
>This email and any attachment hereto are confidential and may contain trade 
>secrets or may be otherwise protected from disclosure. If you have received 
>it in error you are in notice of this fact. Please notify us immediately by 
>reply email and then delete this email and any attachment from your system. 
>Please understand that you are not allowed to copy this email or any 
>attachment hereto or disclose its contents to any other person. Thank you. 
>
> 
>
>Wichtiger Hinweis 
>Diese E-Mail und etwaige Anlagen können Betriebs- oder Geschäftsgeheimnisse 
>oder sonstige vertrauliche Informationen enthalten. Sollten Sie diese E-Mail 
>irrtümlich erhalten haben, ist Ihnen dieser Umstand hiermit bekannt. Bitte 
>benachrichtigen Sie uns in diesem Fall umgehend durch Rücksendung der E-Mail 
>und löschen Sie diese E-Mail einschließlich etwaiger Anlagen von Ihrem 
>System. Diese E-Mail und ihre Anlagen dürfen weiterhin nicht kopiert oder an 
>Dritte weitergegeben werden. Vielen Dank. 
>------------------------------------------------------------------ 
>Thorsten Petersen <thorsten.petersen(at)draeger.com> 
>Dräger Medical AG & Co. KGaA 
>Moislinger Allee 53-55 
>23542 Luebeck, Germany 
>------------------------------------------------------------------ 
>
> 
>
>  
>
>------------------------------------------------------------------------
>
>_______________________________________________
>AGENTPP mailing list
>AGENTPP at agentpp.org
>http://agentpp.org/mailman/listinfo/agentpp
>  
>





More information about the AGENTPP mailing list