It reduces the number of ops and simplifies the code, slightly.
Add a missing IO::Handle import while we're at it, to be
explicit about which methods we use.
use strict;
use warnings;
use base qw(PublicInbox::SearchIdx);
use strict;
use warnings;
use base qw(PublicInbox::SearchIdx);
+use IO::Handle (); # autoflush
sub new {
my ($class, $v2writable, $shard) = @_;
sub new {
my ($class, $v2writable, $shard) = @_;
pipe($r, $w) or die "pipe failed: $!\n";
binmode $r, ':raw';
binmode $w, ':raw';
pipe($r, $w) or die "pipe failed: $!\n";
binmode $r, ':raw';
binmode $w, ':raw';
my $pid = fork;
defined $pid or die "fork failed: $!\n";
if ($pid == 0) {
my $pid = fork;
defined $pid or die "fork failed: $!\n";
if ($pid == 0) {
if (my $w = $self->{w}) {
print $w "$bytes $artnum $oid $mid0\n", $$msgref or die
"failed to write shard $!\n";
if (my $w = $self->{w}) {
print $w "$bytes $artnum $oid $mid0\n", $$msgref or die
"failed to write shard $!\n";
- $w->flush or die "failed to flush: $!\n";
} else {
$$msgref = undef;
$self->begin_txn_lazy;
} else {
$$msgref = undef;
$self->begin_txn_lazy;
my ($self) = @_;
if (my $w = $self->{w}) {
print $w "barrier\n" or die "failed to print: $!";
my ($self) = @_;
if (my $w = $self->{w}) {
print $w "barrier\n" or die "failed to print: $!";
- $w->flush or die "failed to flush: $!";
} else {
$self->commit_txn_lazy;
}
} else {
$self->commit_txn_lazy;
}