From: <car...@us...> - 2007-01-27 15:06:08
|
Revision: 1295 http://svn.sourceforge.net/wired/?rev=1295&view=rev Author: carres_l Date: 2007-01-27 07:06:03 -0800 (Sat, 27 Jan 2007) Log Message: ----------- Cleans the data to save properly when doing multiple save in one session. No more memory leak, no more segfault. Modified Paths: -------------- branches/saveXml/src/save/WiredDocument.cpp Modified: branches/saveXml/src/save/WiredDocument.cpp =================================================================== --- branches/saveXml/src/save/WiredDocument.cpp 2007-01-27 15:05:02 UTC (rev 1294) +++ branches/saveXml/src/save/WiredDocument.cpp 2007-01-27 15:06:03 UTC (rev 1295) @@ -67,27 +67,33 @@ void WiredDocument::clearDocData() { SaveElementsHashMap::iterator dataSaveIt; - -// for (dataSaveIt = _dataSave.begin(); -// dataSaveIt != _dataSave.end(); -// dataSaveIt++) -// if(dataSaveIt->second) -// rmDocDataFile(dataSaveIt->first); -// std::cerr << "clearDocData -> GetName : " << this->_name.mb_str() << std::endl; - + + while(!_dataSave.empty()) + { + dataSaveIt = _dataSave.begin(); + if(dataSaveIt->second) + rmDocDataFile(dataSaveIt->first); + } + + //to be sure... _dataSave.clear(); } void WiredDocument::rmDocDataFile(wxString file) { -// int i; - -// if(_dataSave.find(file) != _dataSave.end()) -// for (i = 0; i < _dataSave[file]->GetCount(); i++) -// if(_dataSave[file]->Item(i) != NULL) -// delete(_dataSave[file]->Item(i)); + int i; + + if(_dataSave.find(file) != _dataSave.end()) + while(!_dataSave[file]->IsEmpty()) + { + if(_dataSave[file]->Item(0)) + delete (_dataSave[file]->Item(0)); + + _dataSave[file]->RemoveAt(0); + } + + _dataSave.erase(file); -// _dataSave.erase(file); } SaveElementsHashMap WiredDocument::getDocData() This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |