diff options
author | Eric Wong <e@80x24.org> | 2016-07-07 01:39:36 +0000 |
---|---|---|
committer | Eric Wong <e@80x24.org> | 2016-07-07 01:41:03 +0000 |
commit | 8e85257577ee4d7d49e59f048852d9d4ac6f8172 (patch) | |
tree | 83b62c2c283df344a6884cc45a5e16aad5c2196b /lib/PublicInbox/Inbox.pm | |
parent | 0cdb0320181606c9b663aa8e37d69a79bff6f3a1 (diff) | |
download | public-inbox-8e85257577ee4d7d49e59f048852d9d4ac6f8172.tar.gz |
This fixes some layering violations and consolidates the cleanup into the inbox object itself. Keeping in mind weakening does not work at all without our PSGI server.
Diffstat (limited to 'lib/PublicInbox/Inbox.pm')
-rw-r--r-- | lib/PublicInbox/Inbox.pm | 37 |
1 files changed, 33 insertions, 4 deletions
diff --git a/lib/PublicInbox/Inbox.pm b/lib/PublicInbox/Inbox.pm index 728caa0c..dc9980b7 100644 --- a/lib/PublicInbox/Inbox.pm +++ b/lib/PublicInbox/Inbox.pm @@ -9,6 +9,26 @@ use Scalar::Util qw(weaken isweak); use PublicInbox::Git; use PublicInbox::MID qw(mid2path); +my $weakt; +eval { + $weakt = 'disabled'; + require PublicInbox::EvCleanup; + $weakt = undef; # OK if we get here +}; + +my $WEAKEN = {}; # string(inbox) -> inbox +sub weaken_task () { + $weakt = undef; + _weaken_fields($_) for values %$WEAKEN; + $WEAKEN = {}; +} + +sub _weaken_later ($) { + my ($self) = @_; + $weakt ||= PublicInbox::EvCleanup::later(*weaken_task); + $WEAKEN->{"$self"} = $self; +} + sub new { my ($class, $opts) = @_; my $v = $opts->{address} ||= 'public-inbox@example.com'; @@ -17,7 +37,7 @@ sub new { bless $opts, $class; } -sub weaken_all { +sub _weaken_fields { my ($self) = @_; foreach my $f (qw(git mm search)) { isweak($self->{$f}) or weaken($self->{$f}); @@ -26,17 +46,26 @@ sub weaken_all { sub git { my ($self) = @_; - $self->{git} ||= eval { PublicInbox::Git->new($self->{mainrepo}) }; + $self->{git} ||= eval { + _weaken_later($self); + PublicInbox::Git->new($self->{mainrepo}); + }; } sub mm { my ($self) = @_; - $self->{mm} ||= eval { PublicInbox::Msgmap->new($self->{mainrepo}) }; + $self->{mm} ||= eval { + _weaken_later($self); + PublicInbox::Msgmap->new($self->{mainrepo}); + }; } sub search { my ($self) = @_; - $self->{search} ||= eval { PublicInbox::Search->new($self->{mainrepo}) }; + $self->{search} ||= eval { + _weaken_later($self); + PublicInbox::Search->new($self->{mainrepo}); + }; } sub try_cat { |