From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.0 required=3.0 tests=ALL_TRUSTED,BAYES_00 shortcircuit=no autolearn=ham autolearn_force=no version=3.4.0 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 6A4262018F for ; Tue, 21 Jun 2016 03:12:03 +0000 (UTC) From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 5/7] searchview: remove recursion from thread view Date: Tue, 21 Jun 2016 03:11:59 +0000 Message-Id: <20160621031201.28089-6-e@80x24.org> In-Reply-To: <20160621031201.28089-1-e@80x24.org> References: <20160621031201.28089-1-e@80x24.org> List-Id: As before, recursion can cause problems sooner than unshifting objects into the head of a queue. --- lib/PublicInbox/SearchView.pm | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/lib/PublicInbox/SearchView.pm b/lib/PublicInbox/SearchView.pm index 6f67a37..ba25827 100644 --- a/lib/PublicInbox/SearchView.pm +++ b/lib/PublicInbox/SearchView.pm @@ -151,7 +151,6 @@ sub tdump { $m; } ($mset->items); - my @rootset; my $th = PublicInbox::Thread->new(@m); $th->thread; if ($q->{r}) { # order by relevance @@ -164,7 +163,6 @@ sub tdump { } else { # order by time (default for threaded view) $th->order(*PublicInbox::View::sort_ts); } - @rootset = $th->rootset; my $state = { ctx => $ctx, anchor_idx => 0, @@ -174,7 +172,13 @@ sub tdump { fh => $fh, }; $ctx->{searchview} = 1; - tdump_ent($state, $_, 0) for @rootset; + my @q = map { (0, $_) } $th->rootset; + while (@q) { + my $level = shift @q; + my $node = shift @q or next; + tdump_ent($state, $level, $node); + unshift @q, $level+1, $node->child, $level, $node->next; + } PublicInbox::View::thread_adj_level($state, 0); $fh->write(search_nav_bot($mset, $q). "\n\n" . @@ -184,8 +188,7 @@ sub tdump { } sub tdump_ent { - my ($state, $node, $level) = @_; - return unless $node; + my ($state, $level, $node) = @_; my $mime = $node->message; if ($mime) { @@ -202,8 +205,6 @@ sub tdump_ent { my $mid = $node->messageid; PublicInbox::View::ghost_flush($state, '', $mid, $level); } - tdump_ent($state, $node->child, $level + 1); - tdump_ent($state, $node->next, $level); } sub foot {