From 7ffd45cd748658db1fa360fa248b3fa81d811c94 Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Mon, 28 Nov 2022 05:31:25 +0000 Subject: [PATCH] lei_mirror: fix infinite loop in dependency resolution We need to account for dependencies which are marked `done'. --- lib/PublicInbox/LeiMirror.pm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/PublicInbox/LeiMirror.pm b/lib/PublicInbox/LeiMirror.pm index ddb1e747..0f46d355 100644 --- a/lib/PublicInbox/LeiMirror.pm +++ b/lib/PublicInbox/LeiMirror.pm @@ -539,8 +539,9 @@ sub clone_all { while (scalar keys %$todo) { for my $x (keys %$todo) { # resolve multi-level references - while (defined($m->{$x}->{reference})) { - $x = $m->{$x}->{reference}; + while (defined(my $nxt = $m->{$x}->{reference})) { + exists($todo->{$nxt}) or last; + $x = $nxt; } my $y = delete $todo->{$x} // next; # already done for (@$y) { -- 2.44.0