[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Pan-devel] Deep tail recursion in walk_and_remove also....
From: |
Sinan Karasu |
Subject: |
[Pan-devel] Deep tail recursion in walk_and_remove also.... |
Date: |
Tue, 25 Apr 2006 21:17:33 -0700 |
User-agent: |
KMail/1.9.1 |
Line 684 has tail recursion on siblings, which sigsegv's
663 walk_and_remove (GtkTreeModel * model,
664 GtkTreeIter * cur,
665 const quarks_t & mids_to_remove)
666 {
667 const Article *a (get_rec (model, cur).article);
668
669 GtkTreeIter child;
670 if (gtk_tree_model_iter_children (model, &child, cur))
671 walk_and_remove (model, &child, mids_to_remove);
672
673 if (mids_to_remove.count (a->message_id))
674 {
675 HeaderPane * pane (static_cast<HeaderPane*>(g_object_get_qdata
(G_OBJECT(model), pane_quark())));
676 pane->_iter_to_view_record.erase (cur->user_data);
677
678 if (gtk_tree_store_remove (GTK_TREE_STORE(model), cur))
679 walk_and_remove (model, cur, mids_to_remove);
680 else
681 return;
682 }
683 else if (gtk_tree_model_iter_next (model, cur))
684 walk_and_remove (model, cur, mids_to_remove);
685
686 }
DDD/gdb output:
101 HeaderPane::ArticleViewRec& get_rec (GtkTreeModel * model,
102 GtkTreeIter * iter)
103 {
104 HeaderPane * pane (static_cast<HeaderPane*>(g_object_get_qdata
(G_OBJECT(model), pane_quark())));
105 return pane->_iter_to_view_record[iter->user_data];
106 }
107 }
108
Program received signal SIGSEGV, Segmentation fault.
(anonymous namespace)::get_rec (model=0x3a96d220, iter=0x7fff698b7fd0) at
header-pane.cc:104
/home/sinan/NewPan/pan-0.94/pan/gui/header-pane.cc:104:2860:beg:0x46999e
(gdb)
where results in
.................
#104611 0x000000000046a1ec in (anonymous namespace)::walk_and_remove
(model=0x39f1cf40, cur=0x7fffbc8147f0, address@hidden) at
header-pane.cc:684
#104612 0x000000000046a1ec in (anonymous namespace)::walk_and_remove
(model=0x39f1cf40, cur=0x7fffbc8147f0, address@hidden) at
header-pane.cc:684
#104613 0x000000000046a1ec in (anonymous namespace)::walk_and_remove
(model=0x39f1cf40, cur=0x7fffbc8147f0, address@hidden) at
header-pane.cc:684
#104614 0x000000000046a1ec in (anonymous namespace)::walk_and_remove
(model=0x39f1cf40, cur=0x7fffbc8147f0, address@hidden) at
header-pane.cc:684
#104615 0x000000000046a1ec in (anonymous namespace)::walk_and_remove
(model=0x39f1cf40, cur=0x7fffbc8147f0, address@hidden) at
header-pane.cc:684
#104616 0x000000000046a1ec in (anonymous namespace)::walk_and_remove
(model=0x39f1cf40, cur=0x7fffbc8147f0, address@hidden) at
header-pane.cc:684
#104617 0x000000000046a1ec in (anonymous namespace)::walk_and_remove
(model=0x39f1cf40, cur=0x7fffbc8147f0, address@hidden) at
header-pane.cc:684
#104618 0x000000000046a1ec in (anonymous namespace)::walk_and_remove
(model=0x39f1cf40, cur=0x7fffbc8147f0, address@hidden) at
header-pane.cc:684
#104619 0x000000000046a1ec in (anonymous namespace)::walk_and_remove
(model=0x39f1cf40, cur=0x7fffbc8147f0, address@hidden) at
header-pane.cc:684
#104620 0x000000000046a1ec in (anonymous namespace)::walk_and_remove
(model=0x39f1cf40, cur=0x7fffbc8147f0, address@hidden) at
header-pane.cc:684
#104621 0x000000000046a1ec in (anonymous namespace)::walk_and_remove
(model=0x39f1cf40, cur=0x7fffbc8147f0, address@hidden) at
header-pane.cc:684
Segmentation fault
------------------------------
Note that gdb seg-faults while reporting 'where'
- [Pan-devel] Deep tail recursion in walk_and_remove also....,
Sinan Karasu <=