use Getopt::Long qw(:config gnu_getopt no_ignore_case auto_abbrev);
use Errno qw(EINTR);
use Fcntl qw(:seek);
-use POSIX qw(_POSIX_PIPE_BUF WNOHANG);
+use POSIX qw(WNOHANG);
use File::Temp ();
my $jobs = 1;
my $repeat = 1;
key2sub($_) for @tests; # precache
my ($for_destroy, $lei_env, $lei_daemon_pid, $owner_pid);
-if (!$ENV{TEST_LEI_DAEMON_PERSIST_DIR} &&
+
+# TEST_LEI_DAEMON_PERSIST is currently broken. I get ECONNRESET from
+# lei even with high kern.ipc.soacceptqueue=1073741823 or SOMAXCONN, not
+# sure why. Also, testing our internal inotify usage is unreliable
+# because lei-daemon uses a single inotify FD for all clients.
+if ($ENV{TEST_LEI_DAEMON_PERSIST} && !$ENV{TEST_LEI_DAEMON_PERSIST_DIR} &&
(PublicInbox::Spawn->can('recv_cmd4') ||
eval { require Socket::MsgHdr })) {
$lei_env = {};
pipe(my ($rd, $wr)) or DIE "pipe: $!";
# fill the queue before forking so children can start earlier
- my $n = (_POSIX_PIPE_BUF / UINT_SIZE);
+ my $n = (POSIX::PIPE_BUF / UINT_SIZE);
if ($n >= $#todo) {
print $wr join('', map { pack('I', $_) } (0..$#todo)) or DIE;
undef $wr;
print $OLDOUT "1..".($repeat * scalar(@tests))."\n" if $repeat >= 0;
if ($lei_env && $$ == $owner_pid) {
my $opt = { 1 => $OLDOUT, 2 => $OLDERR };
+ my $cur_daemon_pid;
+ run_script([qw(lei daemon-pid)], $lei_env, { 1 => \$cur_daemon_pid });
run_script([qw(lei daemon-kill)], $lei_env, $opt);
+ DIE "lei daemon restarted\n" if $cur_daemon_pid != $lei_daemon_pid;
}