about summary refs log tree commit homepage
path: root/lib/PublicInbox/Daemon.pm
diff options
context:
space:
mode:
authorEric Wong <e@80x24.org>2020-09-19 09:37:14 +0000
committerEric Wong <e@80x24.org>2020-09-19 21:39:47 +0000
commitd78f50649a5545d66a61b5465ca7f5ce4be398ea (patch)
tree7a0dc7bde92e89bd57dca861624fac8cae7c1be6 /lib/PublicInbox/Daemon.pm
parent881a5493a8c970c10c051cc55d10d2968e71e691 (diff)
downloadpublic-inbox-d78f50649a5545d66a61b5465ca7f5ce4be398ea.tar.gz
It seems easiest to have a singleton Gcf2Client client object
per daemon worker for all inboxes to use.  This reduces overall
FD usage from pipes.

The `public-inbox-gcf2' command + manpage are gone and a `$^X'
one-liner is used, instead.  This saves inodes for internal
commands and hopefully makes it easier to avoid mismatched
PERL5LIB include paths (as noticed during development :x).

We'll also make the existing cat-file process management
infrastructure more resilient to BOFHs on process killing
sprees (or in case our libgit2-based code fails on us).

(Rare) PublicInbox::WWW PSGI users NOT using public-inbox-httpd
won't automatically benefit from this change, and extra
configuration will be required (to be documented later).
Diffstat (limited to 'lib/PublicInbox/Daemon.pm')
-rw-r--r--lib/PublicInbox/Daemon.pm11
1 files changed, 11 insertions, 0 deletions
diff --git a/lib/PublicInbox/Daemon.pm b/lib/PublicInbox/Daemon.pm
index b929ec2a..1520f8f2 100644
--- a/lib/PublicInbox/Daemon.pm
+++ b/lib/PublicInbox/Daemon.pm
@@ -19,6 +19,7 @@ use PublicInbox::Syscall qw($SFD_NONBLOCK);
 require PublicInbox::Listener;
 use PublicInbox::EOFpipe;
 use PublicInbox::Sigfd;
+use PublicInbox::GitAsyncCat;
 my @CMD;
 my ($set_user, $oldset);
 my (@cfg_listen, $stdout, $stderr, $group, $user, $pid_file, $daemonize);
@@ -652,6 +653,16 @@ sub run ($$$;$) {
         daemon_prepare($default);
         my $af_default = $default =~ /:8080\z/ ? 'httpready' : undef;
         my $for_destroy = daemonize();
+
+        # this wastes a bit of memory for non-PublicInbox::WWW -httpd users
+        # oh well...
+        eval {
+                require PublicInbox::Gcf2;
+                require PublicInbox::Gcf2Client;
+        };
+        local $PublicInbox::GitAsyncCat::GCF2C =
+                                PublicInbox::Gcf2Client::new() if !$@;
+
         daemon_loop($refresh, $post_accept, $tlsd, $af_default);
         PublicInbox::DS->Reset;
         # ->DESTROY runs when $for_destroy goes out-of-scope