[Aptitude-svn-commit] r3722 - in branches/aptitude-0.3/aptitude: .
src/vscreen
Daniel Burrows
dburrows at costa.debian.org
Sat Aug 6 18:39:08 UTC 2005
Author: dburrows
Date: Sat Aug 6 18:39:06 2005
New Revision: 3722
Modified:
branches/aptitude-0.3/aptitude/ChangeLog
branches/aptitude-0.3/aptitude/src/vscreen/vscreen_widget.cc
Log:
Apparently I have had a huge gaping bug and memory leak for a very stupid reason. How embarassing.
Modified: branches/aptitude-0.3/aptitude/ChangeLog
==============================================================================
--- branches/aptitude-0.3/aptitude/ChangeLog (original)
+++ branches/aptitude-0.3/aptitude/ChangeLog Sat Aug 6 18:39:06 2005
@@ -1,5 +1,12 @@
2005-08-06 Daniel Burrows <dburrows at debian.org>
+ * src/vscreen/vscreen_widget.cc:
+
+ Fix a gaping bug and memory leak that only just came to my
+ attention. Stuff that was destroyed wasn't being deleted!
+ Apparently I commented the code that did the deletion out while
+ debugging and never reinstated it. Doh!
+
* src/ui.cc:
Really set the global apt error dialog to NULL when it is
Modified: branches/aptitude-0.3/aptitude/src/vscreen/vscreen_widget.cc
==============================================================================
--- branches/aptitude-0.3/aptitude/src/vscreen/vscreen_widget.cc (original)
+++ branches/aptitude-0.3/aptitude/src/vscreen/vscreen_widget.cc Sat Aug 6 18:39:06 2005
@@ -6,6 +6,8 @@
// needed for queuelayout:
#include "vscreen.h"
+#include <set>
+
#include <sigc++/adaptors/bind.h>
#include <sigc++/functors/mem_fun.h>
@@ -21,7 +23,7 @@
using namespace std;
// Queues of things that Need To Be Done
-static list<vscreen_widget *> todelete;
+static set<vscreen_widget *> todelete;
static list<vscreen_widget *> toresize;
vscreen_widget::vscreen_widget()
@@ -60,12 +62,9 @@
void vscreen_widget::handle_pending_deletes()
{
- // don't delete -- debugging
-
- //for(list<vscreen_widget *>::iterator i=todelete.begin();
- // i!=todelete.end();
- // i++)
- // delete *i;
+ for(set<vscreen_widget *>::iterator i=todelete.begin();
+ i!=todelete.end(); i++)
+ delete *i;
todelete.erase(todelete.begin(), todelete.end());
}
@@ -125,6 +124,9 @@
void vscreen_widget::destroy()
{
+ if(todelete.find(this) != todelete.end())
+ return;
+
hide();
if(owner)
@@ -143,13 +145,7 @@
focussed.clear();
unfocussed.clear();
- for(list<vscreen_widget *>::iterator i=todelete.begin();
- i!=todelete.end();
- i++)
- if(*i==this)
- return;
-
- todelete.push_back(this);
+ todelete.insert(this);
}
void vscreen_widget::show()
More information about the Aptitude-svn-commit
mailing list