From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: X-Spam-Status: No, score=-4.2 required=3.0 tests=ALL_TRUSTED,BAYES_00, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from localhost (dcvr.yhbt.net [127.0.0.1]) by dcvr.yhbt.net (Postfix) with ESMTP id 911F51F9FC for ; Sat, 24 Dec 2022 07:17:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=80x24.org; s=selector1; t=1671866228; bh=LaY0cB3DHRDfmqJI/Q5QZNTWnjKUxx/JhN+fjhNVoyY=; h=From:To:Subject:Date:In-Reply-To:References:From; b=0h93vzVvZLeo6KLPSrLHIelLdxeiPLm4fnu7ONEIE7MP7odsGXs8kC5MQtJh2d2PA Ong9TbGw9j123CAdaUJW/TLU21lL1sUB4AyiRstzaS58nkKttqCkb3HBbCcaBXBs1d HH02YTHV95tu7pmslX8S/Ti9/RrlQqfcOjy1MGg8= From: Eric Wong To: meta@public-inbox.org Subject: [PATCH 2/2] test_common: avoid needless fcntl in start_script Date: Sat, 24 Dec 2022 07:17:08 +0000 Message-Id: <20221224071708.1222828-3-e@80x24.org> In-Reply-To: <20221224071708.1222828-1-e@80x24.org> References: <20221224071708.1222828-1-e@80x24.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit List-Id: POSIX::dup2 does not do anything in addition to dup2(2) and is thus immune to Perl automatically setting FD_CLOEXEC on FDs it makes into IO objects/globs. --- lib/PublicInbox/TestCommon.pm | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/lib/PublicInbox/TestCommon.pm b/lib/PublicInbox/TestCommon.pm index 888c1f1e..179f8bae 100644 --- a/lib/PublicInbox/TestCommon.pm +++ b/lib/PublicInbox/TestCommon.pm @@ -479,16 +479,9 @@ sub start_script { # pretend to be systemd (cf. sd_listen_fds(3)) # 3 == SD_LISTEN_FDS_START my $fd; - for ($fd = 0; 1; $fd++) { - my $s = $opt->{$fd}; - last if $fd >= 3 && !defined($s); - next unless $s; - my $fl = fcntl($s, F_GETFD, 0); - if (($fl & FD_CLOEXEC) != FD_CLOEXEC) { - warn "got FD:".fileno($s)." w/o CLOEXEC\n"; - } - fcntl($s, F_SETFD, $fl &= ~FD_CLOEXEC); - dup2(fileno($s), $fd) or die "dup2 failed: $!\n"; + for ($fd = 0; $fd < 3 || defined($opt->{$fd}); $fd++) { + my $io = $opt->{$fd} // next; + dup2(fileno($io), $fd) or die "dup2($io, $fd): $!"; } %ENV = (%ENV, %$env) if $env; my $fds = $fd - 3;