fix missing loop check
commit370d1e01ac9a81c10aa1cc3dea256337f94321c9
authorEric Wong <e@80x24.org>
Thu, 26 Apr 2018 00:01:56 +0000 (26 00:01 +0000)
committerEric Wong <e@80x24.org>
Thu, 26 Apr 2018 00:02:24 +0000 (26 00:02 +0000)
treeca724eb755de8d54aa9eac56cc52b7db3013aa05
parent341e3ac6a07358c76b4e0690567949063cc70497
fix missing loop check

We failed to detect cyclic dependencies, leading to lost thread
roots.  In this Ruby version, I also screwed up the `seen' hash
check in a misguided effort to avoid an extra hash lookup.

The same algorithm was recently fixed in public-inbox:

  https://public-inbox.org/meta/20180425085249.14974-1-e@80x24.org/

Summarizing what happened with public-inbox: this algorithm can
still be thrown off when the References: order presented to us
is wrong, so sorting messages by age before feeding to
Msgthr#add can improve the results.

Regardless of ordering, messages should not become "lost" by the
algorithm.
lib/msgthr.rb
lib/msgthr/container.rb
test/test_msgthr.rb