kdenonbeta/kdedebian/kapture
CVS commit by mornfall:
- fix a double-free bug, caused by the fact that m_item deletes all it's
children, while we deleted also all the m_items manually, in
descend-recursion order (so the parent first triggered the delete of
all m_items in a subtree and then individual nodes delete their respective
m_items again)
M +3 -3 libcapture/tree.cpp 1.10
M +20 -11 libkapture/listtreewidget.h 1.6
--- kdenonbeta/kdedebian/kapture/libcapture/tree.cpp #1.9:1.10
@@ -221,8 +221,8 @@ void Tree::refresh ()
void Tree::clear ()
{
- if (m_root)
delete m_root;
- // m_feed = 0;
m_root = 0;
+ delete m_stash;
+ m_stash = 0;
}
--- kdenonbeta/kdedebian/kapture/libkapture/listtreewidget.h #1.5:1.6
@@ -26,4 +26,5 @@ namespace capture {
namespace kapture {
using namespace capture;
+ class KListViewItemCustom;
class ListTreeWidget: public KListView, public Tree
@@ -42,17 +43,7 @@ namespace kapture {
TreeNode *stash () { return m_stash; };
};
- class KListViewItemCustom: public KListViewItem
- {
- public:
- TreeNode *m_treeNode;
- KListViewItemCustom (KListView *v, TreeNode *n)
- : KListViewItem (v), m_treeNode (n)
- {};
- KListViewItemCustom (KListViewItem *i, TreeNode *n)
- : KListViewItem (i), m_treeNode (n)
- {};
- };
class ListTreeWidgetItem: virtual public TreeNode
{
+ friend class KListViewItemCustom;
public:
ListTreeWidgetItem (ListTreeWidget *list, TreeNode *parent);
@@ -65,4 +56,22 @@ namespace kapture {
TreeNode *m_itemParent;
};
+ class KListViewItemCustom: public KListViewItem
+ {
+ public:
+ ListTreeWidgetItem *m_treeNode;
+ KListViewItemCustom (KListView *v, ListTreeWidgetItem *n)
+ : KListViewItem (v), m_treeNode (n)
+ {};
+ KListViewItemCustom (KListViewItem *i, ListTreeWidgetItem *n)
+ : KListViewItem (i), m_treeNode (n)
+ {};
+ virtual ~KListViewItemCustom ()
+ {
+ // *cough* our destructor will delete all m_treeNode childrens'
+ // m_item, meaning that these would go and double-delete them
+ if (m_treeNode)
+ m_treeNode -> m_item = 0;
+ }
+ };
class ListTreeWidgetGItem: virtual public ListTreeWidgetItem, virtual public TreeGroupNode
{
Reply to: