diff options
Diffstat (limited to 'lib/PublicInbox/Thread.pm')
-rw-r--r-- | lib/PublicInbox/Thread.pm | 86 |
1 files changed, 0 insertions, 86 deletions
diff --git a/lib/PublicInbox/Thread.pm b/lib/PublicInbox/Thread.pm deleted file mode 100644 index 8af94616..00000000 --- a/lib/PublicInbox/Thread.pm +++ /dev/null @@ -1,86 +0,0 @@ -# subclass Mail::Thread and use this to workaround a memory leak -# Based on the patch in: https://rt.cpan.org/Public/Bug/Display.html?id=22817 -# -# Additionally, workaround for a bug where $walk->topmost returns undef: -# - http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=795913 -# - https://rt.cpan.org/Ticket/Display.html?id=106498 -# -# And avoid recursion in recurse_down: -# - https://rt.cpan.org/Ticket/Display.html?id=116727 -# - http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=833479 -# -# License differs from the rest of public-inbox (but is compatible): -# This library is free software; you can redistribute it and/or modify -# it under the same terms as Perl itself. -package PublicInbox::Thread; -use strict; -use warnings; -use base qw(Mail::Thread); -# WARNING! both these Mail::Thread knobs were found by inspecting -# the Mail::Thread 2.55 source code, and we have some monkey patches -# in PublicInbox::Thread to fix memory leaks. Since Mail::Thread -# appears unmaintained, I suppose it's safe to depend on these -# variables for now: -{ - no warnings 'once'; - # we want strict threads to expose (and hopefully discourage) - # use of broken email clients - $Mail::Thread::nosubject = 1; - # Keep ghosts with only a single direct child, - # don't hide that there may be missing messages. - $Mail::Thread::noprune = 1; -} - -if ($Mail::Thread::VERSION <= 2.55) { - eval q(sub _container_class { 'PublicInbox::Thread::Container' }); -} - -package PublicInbox::Thread::Container; -use strict; -use warnings; -use base qw(Mail::Thread::Container); -use Scalar::Util qw(weaken); -sub parent { @_ == 2 ? weaken($_[0]->{parent} = $_[1]) : $_[0]->{parent} } - -sub topmost { - $_[0]->SUPER::topmost || PublicInbox::Thread::CPANRTBug106498->new; -} - -# non-recursive version of recurse_down to avoid stack depth warnings -sub recurse_down { - my ($self, $callback) = @_; - my %seen; - my @q = ($self); - while (my $cont = shift @q) { - $seen{$cont}++; - $callback->($cont); - - if (my $next = $cont->next) { - if ($seen{$next}) { - $cont->next(undef); - } else { - push @q, $next; - } - } - if (my $child = $cont->child) { - if ($seen{$child}) { - $cont->child(undef); - } else { - push @q, $child; - } - } - } -} - -# ref: -# - http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=795913 -# - https://rt.cpan.org/Ticket/Display.html?id=106498 -package PublicInbox::Thread::CPANRTBug106498; -use strict; -use warnings; - -sub new { bless {}, $_[0] } - -sub simple_subject {} - -1; |