diff options
author | Eric Wong <e@yhbt.net> | 2020-06-10 07:04:31 +0000 |
---|---|---|
committer | Eric Wong <e@yhbt.net> | 2020-06-13 07:55:45 +0000 |
commit | f1c9ad532f8dd46df172cfde85329a6e00ed1eab (patch) | |
tree | 0ea94c773af1126d54fc2f39e71f71a61985aeed /lib/PublicInbox/GitAsyncCat.pm | |
parent | 3c7c389f514f9123667926af1613b5c79833085c (diff) | |
download | public-inbox-f1c9ad532f8dd46df172cfde85329a6e00ed1eab.tar.gz |
Trying to avoid a circular reference by relying on $ibx object here makes no sense, since skipping GitCatAsync::close will result in an FD leak, anyways. So keep GitAsyncCat contained to git-only operations, since we'll be using it for Solver in the distant feature.
Diffstat (limited to 'lib/PublicInbox/GitAsyncCat.pm')
-rw-r--r-- | lib/PublicInbox/GitAsyncCat.pm | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/lib/PublicInbox/GitAsyncCat.pm b/lib/PublicInbox/GitAsyncCat.pm index 65e16121..8701e4cf 100644 --- a/lib/PublicInbox/GitAsyncCat.pm +++ b/lib/PublicInbox/GitAsyncCat.pm @@ -13,7 +13,7 @@ use strict; use parent qw(PublicInbox::DS Exporter); use fields qw(git); use PublicInbox::Syscall qw(EPOLLIN EPOLLET); -our @EXPORT = qw(git_async_msg); +our @EXPORT = qw(git_async_cat); sub new { my ($class, $git) = @_; @@ -36,14 +36,16 @@ sub event_step { sub close { my ($self) = @_; - delete $self->{git}; + if (my $git = delete $self->{git}) { + delete $git->{async_cat}; # drop circular reference + } $self->SUPER::close; # PublicInbox::DS::close } -sub git_async_msg ($$$$) { - my ($ibx, $smsg, $cb, $arg) = @_; - $ibx->git->cat_async($smsg->{blob}, $cb, $arg); - $ibx->{async_cat} //= new(__PACKAGE__, $ibx->{git}); +sub git_async_cat ($$$$) { + my ($git, $oid, $cb, $arg) = @_; + $git->cat_async($oid, $cb, $arg); + $git->{async_cat} //= new(__PACKAGE__, $git); # circular reference } 1; |