pan-devel
[Top][All Lists]
Advanced

[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'




reply via email to

[Prev in Thread] Current Thread [Next in Thread]