lib/PublicInbox/Daemon.pm | 5 +++++ lib/PublicInbox/EvCleanup.pm | 4 ++++ lib/PublicInbox/Git.pm | 4 ++++ lib/PublicInbox/V2Writable.pm | 3 +++ diff --git a/lib/PublicInbox/Daemon.pm b/lib/PublicInbox/Daemon.pm index 4629aadb45ec070332ef20d93673409301409d3d..6d2ae81bc1694dcc3c9fbf1ae2cbf7b249c3153d 100644 --- a/lib/PublicInbox/Daemon.pm +++ b/lib/PublicInbox/Daemon.pm @@ -356,6 +356,11 @@ sub master_loop { pipe(my ($p0, $p1)) or die "failed to create parent-pipe: $!"; pipe(my ($r, $w)) or die "failed to create self-pipe: $!"; + + if ($^O eq 'linux') { # 1031: F_SETPIPE_SZ = 1031 + fcntl($_, 1031, 4096) for ($w, $p1); + } + IO::Handle::blocking($w, 0); my $set_workers = $worker_processes; my @caught; diff --git a/lib/PublicInbox/EvCleanup.pm b/lib/PublicInbox/EvCleanup.pm index 1a3a3d5e7735b6d8a3f2a12cd6ff4cc2ac7e3500..1a2bdb294a6431a38cb79f7fa69273c6bbf19653 100644 --- a/lib/PublicInbox/EvCleanup.pm +++ b/lib/PublicInbox/EvCleanup.pm @@ -19,7 +19,11 @@ sub once_init () { my $self = fields::new('PublicInbox::EvCleanup'); my ($r, $w); + + # This is a dummy pipe which is always writable so it can always + # fires in the next event loop iteration. pipe($r, $w) or die "pipe: $!"; + fcntl($w, 1031, 4096) if $^O eq 'linux'; # 1031: F_SETPIPE_SZ $self->SUPER::new($w); $self->{rd} = $r; # never read, since we never write.. $self; diff --git a/lib/PublicInbox/Git.pm b/lib/PublicInbox/Git.pm index 95df52ed6f2fd9f2b058d404d4358acebf0532c2..16117277079e86b6aecfc4291a3cf90e25928c0a 100644 --- a/lib/PublicInbox/Git.pm +++ b/lib/PublicInbox/Git.pm @@ -37,6 +37,10 @@ my ($in_r, $in_w, $out_r, $out_w); pipe($in_r, $in_w) or fail($self, "pipe failed: $!"); pipe($out_r, $out_w) or fail($self, "pipe failed: $!"); + if ($^O eq 'linux') { # 1031: F_SETPIPE_SZ + fcntl($out_w, 1031, 4096); + fcntl($in_w, 1031, 4096) if $batch eq '--batch-check'; + } my @cmd = ('git', "--git-dir=$self->{git_dir}", qw(cat-file), $batch); my $redir = { 0 => fileno($out_r), 1 => fileno($in_w) }; diff --git a/lib/PublicInbox/V2Writable.pm b/lib/PublicInbox/V2Writable.pm index 0a304aae241a6b390592b30b3f21ddfeb608de9b..fbab8f70be8a3233f0b4cc2a6d776e7c02c13244 100644 --- a/lib/PublicInbox/V2Writable.pm +++ b/lib/PublicInbox/V2Writable.pm @@ -243,6 +243,9 @@ } if ($self->{parallel}) { pipe(my ($r, $w)) or die "pipe failed: $!"; + # pipe for barrier notifications doesn't need to be big, + # 1031: F_SETPIPE_SZ + fcntl($w, 1031, 4096) if $^O eq 'linux'; $self->{bnote} = [ $r, $w ]; $w->autoflush(1); }