[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