From 504774acd5236653cdeafb536be95fbfb147258f Mon Sep 17 00:00:00 2001 From: Eric Wong Date: Tue, 15 Dec 2020 09:03:34 +0000 Subject: lei: use spawn (vfork + execve) for lazy start This allows us to rely on FD_CLOEXEC being set on pipes from prove(1), so forgetting `daemon-stop' won't cause tests to hang. Unfortunately, daemon tests will be slower with this. --- script/lei | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'script/lei') diff --git a/script/lei b/script/lei index 1b5af3a1..637c1951 100755 --- a/script/lei +++ b/script/lei @@ -21,13 +21,19 @@ if (eval { require IO::FDPass; 1 }) { # use daemon to reduce load time }; my $sock = IO::Socket::UNIX->new(Peer => $path, Type => SOCK_STREAM); unless ($sock) { # start the daemon if not started - my $err = $!; - require PublicInbox::LeiDaemon; - $err = PublicInbox::LeiDaemon::lazy_start($path, $err); + my $err = $! + 0; + my $env = { PERL5LIB => join(':', @INC) }; + my $cmd = [ $^X, qw[-MPublicInbox::LeiDaemon + -E PublicInbox::LeiDaemon::lazy_start(@ARGV)], + $path, $err ]; + require PublicInbox::Spawn; + waitpid(PublicInbox::Spawn::spawn($cmd, $env), 0); + warn "lei-daemon exited with \$?=$?\n" if $?; + # try connecting again anyways, unlink+bind may be racy $sock = IO::Socket::UNIX->new(Peer => $path, Type => SOCK_STREAM) // die - "connect($path): $! (bind($path): $err)"; + "connect($path): $! (after attempted daemon start)"; } my $pwd = $ENV{PWD}; my $cwd = cwd(); -- cgit v1.2.3-24-ge0c7