Re: [Cflowd] Fix for CflowdConfig::Clear() and CflowdCollectorMap::Clear() [was:Fix for memory leak on each config re-read.]

From: Shvedko Pavel (shved@mtu.ru)
Date: Fri Mar 22 2002 - 00:21:32 PST


"Nicholas L. Nigay" wrote:

> There are a few amount of memory new()-ed in LoadConfigFile().
> But not all of them are freed.
> It causes memory leak each time config is re-readed.
>
> Correct versions of CflowdConfig::Clear() and
> CflowdCollectorMap::Clear() follows.
>
> in CflowdConfig.cc.in:
> ------------------------
> void CflowdConfig::Clear()
> {
> if (this->_ciscoMap.size() > 0) {
> this->_ciscoMap.Clear();
> }
>
> if (this->_portList.size() > 0)
> this->_portList.erase(this->_portList.begin(),this->_portList.end());
>
> if (this->_collectorMap.size() > 0) {
> this->_collectorMap.Clear();
> }
> return;
> }
>
> in CflowdCollectorMap.cc
> previous version of CflowdCollectorMap::Clear() core dumps whenever
> (*(*collmIter).second).IpAddress() is called for CflowdCollector that
> were recently delete()-d.
> ( thanks to "Shvedko Pavel" <shved@mtu.ru>):
> ----------------------------
> #include <string>
> #include <vector>
>
> #include "CflowdCollectorMap.hh"
>
> //-------------------------------------------------------------------------
> // void CflowdCollectorMap::Clear()
> //.........................................................................
> //
> //-------------------------------------------------------------------------
> void CflowdCollectorMap::Clear()
> {
> CflowdCollectorMap::iterator collmIter;
> vector<CflowdCollectorMap::iterator> deleteIterVect;
>
> for (collmIter = (*this).begin(); collmIter != (*this).end();
> collmIter++) {
> if ((*collmIter).second != (CflowdCollector *)NULL) {
> if ((*collmIter).first == (*(*collmIter).second).IpAddress()) {
> deleteIterVect.push_back(collmIter);
> }
> }
> }
>
> vector<CflowdCollectorMap::iterator>::iterator deleteIter;
>
> for (deleteIter = deleteIterVect.begin();
> deleteIter != deleteIterVect.end();
> deleteIter++) {
> delete((*(*deleteIter)).second);
> (*(*deleteIter)).second = (CflowdCollector *)NULL;
> }
>
> (*this).erase((*this).begin(),(*this).end());
> return;
> }
>
> PS: Pavel, please confirm. 8-)

now all right...

>
>
> --
> Good luck!
> Nicholas L. Nigay
>
> _______________________________________________
> Cflowd mailing list
> Cflowd@caida.org
> http://login.caida.org/mailman/listinfo/cflowd



This archive was generated by hypermail 2.1.4 : Mon Mar 25 2002 - 11:16:01 PST