[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