GNU bug report logs - #75658
Non-deterministic Gash error in ‘gcc-mesboot-4.9.4’

Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.

Package: guix; Severity: important; Reported by: Ludovic Courtès <ludovic.courtes@HIDDEN>; dated Sat, 18 Jan 2025 22:09:01 UTC; Maintainer for guix is bug-guix@HIDDEN.

Message received at 75658 <at> debbugs.gnu.org:


Received: (at 75658) by debbugs.gnu.org; 2 Apr 2025 14:29:20 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Apr 02 10:29:19 2025
Received: from localhost ([127.0.0.1]:58723 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tzz5g-0007rW-ML
	for submit <at> debbugs.gnu.org; Wed, 02 Apr 2025 10:29:19 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:59068)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <ludo@HIDDEN>) id 1tzz5U-0007qL-EL
 for 75658 <at> debbugs.gnu.org; Wed, 02 Apr 2025 10:29:11 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <ludo@HIDDEN>)
 id 1tzz5L-0007C5-CQ; Wed, 02 Apr 2025 10:28:56 -0400
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=MIME-Version:Date:References:In-Reply-To:Subject:To:
 From; bh=OpMFYdjotSjEFs7O435EGc20nn3bVqHNxx9ccWUMa9g=; b=FtgFMY5i4mg4PqCSbYkj
 rmzRULZM3fIwruHOlQxSLlLAmqzTukxTVdGFyumgv+5HSRvSiugl5GzZsDK7PxRpm/zu88W9c7XKu
 7RJwHJtFtFHUbXNHqXnDYnxtEG2800CmWpzLFRZofW1fDQ3gtK7AzNqhXZ+Pkv2zW4woIAMlLLjuk
 prnj9vYRAUflpNTnh1PxY0NLVXrE+SAFEe1EHfabmvXFmCPiQ5N6XEzKF5b/0pEs6/NlJ/GEl7bUy
 TgZb+vyF+XCy8eNdcFEjeRN0dVVcYXxPY9VtOJ8NtS1tRYtb5wTpoI0DN2va65Gic4mD1DMoZEOZd
 EFV8J1lCg+zJrA==;
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludo@HIDDEN>
To: Janneke Nieuwenhuizen <janneke@HIDDEN>
Subject: Re: bug#75658: [PATCH 0/4] Fixes for subshells and redirections
In-Reply-To: <87zfh72bay.fsf@HIDDEN> (Janneke Nieuwenhuizen's message of
 "Thu, 27 Mar 2025 08:16:21 +0100")
References: <20250319212033.4643-1-ludo@HIDDEN> <87zfh72bay.fsf@HIDDEN>
Date: Wed, 02 Apr 2025 16:28:46 +0200
Message-ID: <87y0wibpsx.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 75658
Cc: Timothy Sample <samplet@HIDDEN>, gash-devel@HIDDEN,
 75658 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

Hi there!

Janneke Nieuwenhuizen <janneke@HIDDEN> skribis:

> That's awesome, what a terrible puzzle that was!
>
> I'm hoping Timothy finds the time to review/merge/release Gash.  We
> could carry these patches in Guix, but yeah.

Yup, it would be great if one of you could do that.  :-)

Especially since =E2=80=98core-packages-team=E2=80=99 has been queued for a=
 while now
and the latest attempts to evaluate the branch have all failed due to
this bug, as in <https://ci.guix.gnu.org/eval/2050457/log/raw> (I guess
we were lucky on the previous =E2=80=98core-updates=E2=80=99 cycle, or just=
 retried
until it would eventually work!).

Cheers,
Ludo=E2=80=99.




Information forwarded to bug-guix@HIDDEN:
bug#75658; Package guix. Full text available.

Message received at 75658 <at> debbugs.gnu.org:


Received: (at 75658) by debbugs.gnu.org; 27 Mar 2025 07:16:41 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 27 03:16:41 2025
Received: from localhost ([127.0.0.1]:47145 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1txhTk-0004nS-6P
	for submit <at> debbugs.gnu.org; Thu, 27 Mar 2025 03:16:41 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:42756)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <janneke@HIDDEN>) id 1txhTf-0004mI-N0
 for 75658 <at> debbugs.gnu.org; Thu, 27 Mar 2025 03:16:38 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <janneke@HIDDEN>)
 id 1txhTZ-00081s-9e; Thu, 27 Mar 2025 03:16:29 -0400
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=MIME-Version:Date:References:In-Reply-To:Subject:To:
 From; bh=HSt7fWFpM3/REIIj1EN4Z1ZQJmWApRWL4nG8tWTbF6I=; b=BfgTA9Vb4543X3Ylkl9Y
 es4WhBIQKb+ZNuR9KwN4ZEZeW8p6LWnkzkP0BPsMjiikQi4VeC18brkBer95PLlE5Yfh4FkhL5y2p
 Dbm5Zl7jd94IfLgKDm91d/xCQ+LLZRSh6an7EMSGT5GnQLry2d0QXO0sEFDcbYN4YbJrbdhZ1QwEc
 QU1tAfIn86c68X+Bvg6bLSbbQCGqT+nTcTSBG9Qyd3JtBhXfZ5s6K2F+ceoML54mSFnoy+aDxgYje
 qx1p/gT+FK+LZ0CrGIWBdR9Vs7BSBsBhSHGiCuXFjWSyIcC9oQV3gFBjRR6JX5CChLZpAB6ONnqJ2
 PjwyOv5rOpqCuw==;
From: Janneke Nieuwenhuizen <janneke@HIDDEN>
To: Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
Subject: Re: [PATCH 0/4] Fixes for subshells and redirections
In-Reply-To: <20250319212033.4643-1-ludo@HIDDEN> ("Ludovic =?utf-8?Q?Cour?=
 =?utf-8?Q?t=C3=A8s=22's?= message
 of "Wed, 19 Mar 2025 22:20:29 +0100")
Organization: AvatarAcademy.nl
References: <20250319212033.4643-1-ludo@HIDDEN>
X-Url: http://AvatarAcademy.nl
Date: Thu, 27 Mar 2025 08:16:21 +0100
Message-ID: <87zfh72bay.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 75658
Cc: Timothy Sample <samplet@HIDDEN>, gash-devel@HIDDEN,
 75658 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

Ludovic Court=C3=A8s writes:

Hi!

> This fixes issues reported at <https://issues.guix.gnu.org/75658>
> and related I noticed while looking at the code.
>
> Feedback welcome!

That's awesome, what a terrible puzzle that was!

I'm hoping Timothy finds the time to review/merge/release Gash.  We
could carry these patches in Guix, but yeah.

Greetings,
Janneke

--=20
Janneke Nieuwenhuizen <janneke@HIDDEN>  | GNU LilyPond https://LilyPond.org
Freelance IT https://www.JoyOfSource.com | Avatar=C2=AE https://AvatarAcade=
my.com




Information forwarded to bug-guix@HIDDEN:
bug#75658; Package guix. Full text available.

Message received at 75658 <at> debbugs.gnu.org:


Received: (at 75658) by debbugs.gnu.org; 20 Mar 2025 14:18:30 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 20 10:18:30 2025
Received: from localhost ([127.0.0.1]:58399 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tvGj7-0000st-Vt
	for submit <at> debbugs.gnu.org; Thu, 20 Mar 2025 10:18:30 -0400
Received: from hera.aquilenet.fr ([185.233.100.1]:34132)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <ludo@HIDDEN>) id 1tvGj1-0000sS-9d
 for 75658 <at> debbugs.gnu.org; Thu, 20 Mar 2025 10:18:26 -0400
Received: from localhost (localhost [127.0.0.1])
 by hera.aquilenet.fr (Postfix) with ESMTP id C76FD87F;
 Thu, 20 Mar 2025 15:18:12 +0100 (CET)
Authentication-Results: hera.aquilenet.fr;
	none
X-Virus-Scanned: Debian amavis at hera.aquilenet.fr
Received: from hera.aquilenet.fr ([127.0.0.1])
 by localhost (hera.aquilenet.fr [127.0.0.1]) (amavis, port 10024) with ESMTP
 id IM3lWOUDinWh; Thu, 20 Mar 2025 15:18:12 +0100 (CET)
Received: from ribbon (unknown [193.50.110.142])
 by hera.aquilenet.fr (Postfix) with ESMTPSA id 737DF1F6;
 Thu, 20 Mar 2025 15:18:10 +0100 (CET)
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludo@HIDDEN>
To: gash-devel@HIDDEN
Subject: Re: bug#75658: [PATCH 0/4] Fixes for subshells and redirections
In-Reply-To: <20250319212033.4643-1-ludo@HIDDEN> ("Ludovic =?utf-8?Q?Cour?=
 =?utf-8?Q?t=C3=A8s=22's?= message
 of "Wed, 19 Mar 2025 22:20:29 +0100")
References: <87msfnsrli.fsf@HIDDEN> <20250319212033.4643-1-ludo@HIDDEN>
Date: Thu, 20 Mar 2025 15:18:09 +0100
Message-ID: <87msdfbxb2.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Rspamd-Queue-Id: C76FD87F
X-Spamd-Result: default: False [4.90 / 15.00]; SPAM_FLAG(5.00)[];
 BAYES_HAM(-3.00)[100.00%]; NEURAL_SPAM(3.00)[1.000];
 MIME_GOOD(-0.10)[text/plain]; MIME_TRACE(0.00)[0:+];
 RCVD_COUNT_TWO(0.00)[2]; FROM_EQ_ENVFROM(0.00)[];
 ARC_NA(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[];
 TO_DN_SOME(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[];
 RCVD_TLS_ALL(0.00)[]; FROM_HAS_DN(0.00)[];
 RCPT_COUNT_THREE(0.00)[4]; MID_RHS_MATCH_FROM(0.00)[]
X-Spam-Level: ****
X-Rspamd-Action: no action
X-Spamd-Bar: ++++
X-Rspamd-Server: hera
X-Spam-Score: 1.0 (+)
X-Debbugs-Envelope-To: 75658
Cc: Timothy Sample <samplet@HIDDEN>, 75658 <at> debbugs.gnu.org,
 Jan Nieuwenhuizen <janneke@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.0 (/)

Ludovic Court=C3=A8s <ludo@HIDDEN> skribis:

>   shell: Exit child process when =E2=80=98execle=E2=80=99 fails.
>   shell: Remove dead code in =E2=80=98install-current-ports!=E2=80=99.
>   shell: =E2=80=98install-current-ports!=E2=80=99 opens file descriptors,=
 not ports.
>   Open low-numbered file descriptors for use by the shell.

For the record, I also built this series with Guile 2.0.9, by modifying
=E2=80=98guix.scm=E2=80=99 to refer to it instead of =E2=80=98guile-3.0=E2=
=80=99 and turning off tests
(since they require (srfi srfi-64), which 2.0.9 doesn=E2=80=99t have).

It appears to work fine and passes this test:

  timeout 10m \
  /gnu/store/3ylfablfwsdaapgk2y3x8yjchmapasxs-gash-0.3.0.6-f988cb-dirty/bin=
/gash -c 'exec 7>/dev/null; while true; do echo $(sh --version) > /dev/null=
; done'

Ludo=E2=80=99.




Information forwarded to bug-guix@HIDDEN:
bug#75658; Package guix. Full text available.

Message received at 75658 <at> debbugs.gnu.org:


Received: (at 75658) by debbugs.gnu.org; 19 Mar 2025 21:27:31 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Mar 19 17:27:31 2025
Received: from localhost ([127.0.0.1]:53553 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tv0wl-00088G-8M
	for submit <at> debbugs.gnu.org; Wed, 19 Mar 2025 17:27:31 -0400
Received: from hera.aquilenet.fr ([185.233.100.1]:35038)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <ludo@HIDDEN>) id 1tv0wi-00087u-33
 for 75658 <at> debbugs.gnu.org; Wed, 19 Mar 2025 17:27:28 -0400
Received: from localhost (localhost [127.0.0.1])
 by hera.aquilenet.fr (Postfix) with ESMTP id 0A112806;
 Wed, 19 Mar 2025 22:27:20 +0100 (CET)
Authentication-Results: hera.aquilenet.fr;
	none
X-Virus-Scanned: Debian amavis at hera.aquilenet.fr
Received: from hera.aquilenet.fr ([127.0.0.1])
 by localhost (hera.aquilenet.fr [127.0.0.1]) (amavis, port 10024) with ESMTP
 id U6sEB8i9ekcd; Wed, 19 Mar 2025 22:27:19 +0100 (CET)
Received: from ribbon (91-160-117-201.subs.proxad.net [91.160.117.201])
 by hera.aquilenet.fr (Postfix) with ESMTPSA id 62A16107;
 Wed, 19 Mar 2025 22:27:16 +0100 (CET)
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludo@HIDDEN>
To: Timothy Sample <samplet@HIDDEN>
Subject: Re: bug#75658: Non-deterministic Gash error in
 =?utf-8?Q?=E2=80=98gcc-mesboot-4=2E9=2E4=E2=80=99?=
In-Reply-To: <87sencmzl8.fsf@HIDDEN> ("Ludovic =?utf-8?Q?Court=C3=A8s=22'?=
 =?utf-8?Q?s?= message of "Sun, 16 Mar 2025 22:32:03 +0100")
References: <87msfnsrli.fsf@HIDDEN> <87wmeqpspy.fsf@HIDDEN>
 <87bju7i6rr.fsf@HIDDEN> <871pv0wkfu.fsf@HIDDEN>
 <87senex4m0.fsf@HIDDEN> <87wmcpnhol.fsf@HIDDEN>
 <87sencmzl8.fsf@HIDDEN>
Date: Wed, 19 Mar 2025 22:27:15 +0100
Message-ID: <87v7s4emoc.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=-=-="
X-Rspamd-Queue-Id: 0A112806
X-Spamd-Result: default: False [6.50 / 15.00]; SPAM_FLAG(5.00)[];
 BAYES_HAM(-3.00)[99.99%]; NEURAL_SPAM(3.00)[1.000];
 MIME_BAD_ATTACHMENT(1.60)[sh:text/plain];
 MIME_GOOD(-0.10)[multipart/mixed,text/plain];
 FROM_EQ_ENVFROM(0.00)[]; MIME_TRACE(0.00)[0:+,1:+,2:+];
 RCVD_COUNT_TWO(0.00)[2]; ARC_NA(0.00)[];
 TO_MATCH_ENVRCPT_ALL(0.00)[]; TO_DN_SOME(0.00)[];
 RCVD_VIA_SMTP_AUTH(0.00)[]; RCVD_TLS_ALL(0.00)[];
 FROM_HAS_DN(0.00)[]; RCPT_COUNT_THREE(0.00)[3];
 MID_RHS_MATCH_FROM(0.00)[]
X-Spam-Level: ******
X-Rspamd-Action: add header
X-Spamd-Bar: ++++++
X-Rspamd-Server: hera
X-Spam: Yes
X-Spam-Score: 1.0 (+)
X-Debbugs-Envelope-To: 75658
Cc: 75658 <at> debbugs.gnu.org, Janneke Nieuwenhuizen <janneke@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.0 (/)

--=-=-=
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Hello Timothy,

Ludovic Court=C3=A8s <ludo@HIDDEN> skribis:

> The hack below addresses that (mostly) by reserving low-number file
> descriptors before the signal and finalization threads create their
> pipe.  (In practice, we can only reserve FDs above 5; FDs 3 and 4 are
> the =E2=80=9Csleep pipe=E2=80=9D I believe.)

I=E2=80=99ve just sent cleaned-up patches to gash-devel including this
fix/workaround.

It passes my tests, meaning that I cannot reproduce the original bug in
a timely fashion when running:

  ./pre-inst-env gash -c 'exec 2>/dev/null; while true; do echo $(sh --vers=
ion) > /dev/null; done'

or when running part of the GCC 4.9.4 =E2=80=98configure=E2=80=99 script in=
 a loop
(attached is the helper script I used for that; not shown here is a
manual modification of said script so that it exits after =E2=80=9Cchecking=
 for
a sed that does not truncate output=E2=80=9D, which was sufficient to repro=
duce
the bug, possibly after many iterations).

It would be great to cut a Gash release soonish as this bug has been
blocking the =E2=80=98core-packages-team=E2=80=99 branch for a while alread=
y.

Thanks,
Ludo=E2=80=99.


--=-=-=
Content-Type: text/plain
Content-Disposition: inline; filename=gash-redirect-EBADF-reproducer.sh
Content-Description: Helper script to reproduce the bug with GCC's configure script.

#!/bin/sh
set -x
export COLUMNS=200
#STRACE="strace -s 100 -f -o log.strace"
PATCH=--with-patch=gash=$PWD/gash-redirect-EBADF.patch
export SHELL=$(guix build gash $PATCH)/bin/gash
export CONFIG_SHELL=$SHELL
OPTIONS="--prefix=/wherever --disable-bootstrap --disable-decimal-float --disable-libatomic --disable-libcilkrts --disable-libgomp --disable-libitm --disable-libmudflap --disable-libquadmath --disable-libsanitizer --disable-libssp --disable-libvtv --disable-lto --disable-lto-plugin --disable-multilib --disable-plugin --disable-threads --enable-languages=c,c++ --enable-static --enable-shared --enable-threads=single --disable-libstdcxx-pch --disable-build-with-cxx"

cd /data/src/gcc-4.9.4
while $STRACE $SHELL -e ./configure $OPTIONS $OPTIONS $OPTIONS
do
    grep fcntl.*EBADF log.strace && break
done

--=-=-=--




Information forwarded to bug-guix@HIDDEN:
bug#75658; Package guix. Full text available.

Message received at 75658 <at> debbugs.gnu.org:


Received: (at 75658) by debbugs.gnu.org; 19 Mar 2025 21:20:54 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Mar 19 17:20:54 2025
Received: from localhost ([127.0.0.1]:53533 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tv0qM-0007ot-6G
	for submit <at> debbugs.gnu.org; Wed, 19 Mar 2025 17:20:54 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:35264)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <ludo@HIDDEN>) id 1tv0qJ-0007oY-Gg
 for 75658 <at> debbugs.gnu.org; Wed, 19 Mar 2025 17:20:52 -0400
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <ludo@HIDDEN>)
 id 1tv0qD-0005fm-Q2; Wed, 19 Mar 2025 17:20:45 -0400
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=MIME-Version:Date:Subject:To:From:in-reply-to:
 references; bh=IlV81GnsYVtkjCCD/omZzmZBkhGkpfypZtmp9adQqkc=; b=hscldkabC1aPzo
 y6zCucsNbLLZWscDiQn3FfP5LWIxm/rLZL1jd9LNLwuLlAx4JaqTus+hBDCZduHBhOKjUFiIH7ZYI
 iAqDGh865jig7WvdPvnACR0xLCIxmQ83Q1IYLs/qcwN5YyAB7H5a0h24fbX+AOKlD1a3w/8eW5eSA
 hozLiRZP8DzhzQxiueHZ/3Qpv+wQ+F5LatTJB8OsXa024A6viBKK/JXCTiy+7wdauCQlSYKYTDPN1
 iL7s+1KV7MjuSU8+TSxyi2hpSMBwyJGrJLltFyrt7HkaHznrv0c2whZvzbyItaFXmr+fKTi2X4KlS
 cmA1XwvUOBfxNf/loakA==;
From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= <ludo@HIDDEN>
To: gash-devel@HIDDEN
Subject: [PATCH 0/4] Fixes for subshells and redirections
Date: Wed, 19 Mar 2025 22:20:29 +0100
Message-ID: <20250319212033.4643-1-ludo@HIDDEN>
X-Mailer: git-send-email 2.48.1
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 75658
Cc: Timothy Sample <samplet@HIDDEN>,
 =?UTF-8?q?Ludovic=20Court=C3=A8s?= <ludo@HIDDEN>, 75658 <at> debbugs.gnu.org,
 Jan Nieuwenhuizen <janneke@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

Hello,

This fixes issues reported at <https://issues.guix.gnu.org/75658>
and related I noticed while looking at the code.

Feedback welcome!

Thanks,
Ludo'.

Ludovic Courtès (4):
  shell: Exit child process when ‘execle’ fails.
  shell: Remove dead code in ‘install-current-ports!’.
  shell: ‘install-current-ports!’ opens file descriptors, not ports.
  Open low-numbered file descriptors for use by the shell.

 gash/shell.scm    | 29 +++++++++++++++++++++--------
 scripts/gash.in   | 14 +++++++++++++-
 tests/exiting.org | 27 +++++++++++++++++++++++++++
 3 files changed, 61 insertions(+), 9 deletions(-)


base-commit: ec9f0313190e380687da387b4207469a0a0a8cd8
-- 
2.48.1





Information forwarded to bug-guix@HIDDEN:
bug#75658; Package guix. Full text available.

Message received at 75658 <at> debbugs.gnu.org:


Received: (at 75658) by debbugs.gnu.org; 16 Mar 2025 21:32:17 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Mar 16 17:32:17 2025
Received: from localhost ([127.0.0.1]:51036 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1ttvai-0005Zc-OO
	for submit <at> debbugs.gnu.org; Sun, 16 Mar 2025 17:32:17 -0400
Received: from hera.aquilenet.fr ([185.233.100.1]:60910)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <ludo@HIDDEN>) id 1ttvad-0005Xj-QO
 for 75658 <at> debbugs.gnu.org; Sun, 16 Mar 2025 17:32:14 -0400
Received: from localhost (localhost [127.0.0.1])
 by hera.aquilenet.fr (Postfix) with ESMTP id A11A240C;
 Sun, 16 Mar 2025 22:32:05 +0100 (CET)
Authentication-Results: hera.aquilenet.fr;
	none
X-Virus-Scanned: Debian amavis at hera.aquilenet.fr
Received: from hera.aquilenet.fr ([127.0.0.1])
 by localhost (hera.aquilenet.fr [127.0.0.1]) (amavis, port 10024) with ESMTP
 id XiHGDMZvJxFA; Sun, 16 Mar 2025 22:32:04 +0100 (CET)
Received: from ribbon (91-160-117-201.subs.proxad.net [91.160.117.201])
 by hera.aquilenet.fr (Postfix) with ESMTPSA id E7C7F1BE;
 Sun, 16 Mar 2025 22:32:03 +0100 (CET)
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludo@HIDDEN>
To: Timothy Sample <samplet@HIDDEN>
Subject: Re: bug#75658: Non-deterministic Gash error in
 =?utf-8?Q?=E2=80=98gcc-mesboot-4=2E9=2E4=E2=80=99?=
In-Reply-To: <87wmcpnhol.fsf@HIDDEN> ("Ludovic =?utf-8?Q?Court=C3=A8s=22'?=
 =?utf-8?Q?s?= message of "Sun, 16 Mar 2025 16:01:14 +0100")
References: <87msfnsrli.fsf@HIDDEN> <87wmeqpspy.fsf@HIDDEN>
 <87bju7i6rr.fsf@HIDDEN> <871pv0wkfu.fsf@HIDDEN>
 <87senex4m0.fsf@HIDDEN> <87wmcpnhol.fsf@HIDDEN>
Date: Sun, 16 Mar 2025 22:32:03 +0100
Message-ID: <87sencmzl8.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=-=-="
X-Rspamd-Queue-Id: A11A240C
X-Spamd-Result: default: False [-5.10 / 15.00]; BAYES_HAM(-3.00)[100.00%];
 NEURAL_HAM(-3.00)[-1.000]; CTYPE_MIXED_BOGUS(1.00)[];
 MIME_GOOD(-0.10)[multipart/mixed,text/plain,text/x-patch];
 FROM_EQ_ENVFROM(0.00)[]; MIME_TRACE(0.00)[0:+,1:+,2:+];
 RCVD_COUNT_TWO(0.00)[2]; RCVD_TLS_ALL(0.00)[]; ARC_NA(0.00)[];
 TO_DN_SOME(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[];
 TO_MATCH_ENVRCPT_ALL(0.00)[]; FROM_HAS_DN(0.00)[];
 RCPT_COUNT_THREE(0.00)[3]; MID_RHS_MATCH_FROM(0.00)[]
X-Rspamd-Action: no action
X-Spamd-Bar: -----
X-Rspamd-Server: hera
X-Spam-Score: 1.0 (+)
X-Debbugs-Envelope-To: 75658
Cc: 75658 <at> debbugs.gnu.org, Janneke Nieuwenhuizen <janneke@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.0 (/)

--=-=-=
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Ludovic Court=C3=A8s <ludo@HIDDEN> skribis:

> But this illustrates another problem: in the child process, right before
> =E2=80=98execve=E2=80=99, the finalization thread may be restarted, in wh=
ich case it
> creates a new pipe.
>
> In the example below, the finalization pipe is on FDs 9 and 7, but
> =E2=80=98install-current-ports!=E2=80=99 blindly dups to FD 7, thereby cl=
osing one end
> of the finalization pipe that was just created:

The hack below addresses that (mostly) by reserving low-number file
descriptors before the signal and finalization threads create their
pipe.  (In practice, we can only reserve FDs above 5; FDs 3 and 4 are
the =E2=80=9Csleep pipe=E2=80=9D I believe.)

It seems to be good enough though.

Thoughts?

Ludo=E2=80=99.


--=-=-=
Content-Type: text/x-patch
Content-Disposition: inline

diff --git a/gash/shell.scm b/gash/shell.scm
index 3611067..68e74e7 100644
--- a/gash/shell.scm
+++ b/gash/shell.scm
@@ -68,14 +68,13 @@ not a @code{file-port?}, its corresponding file descriptor will refer
 to @file{/dev/null}."
   ;; XXX: Input/output ports?  Closing other FDs?
   (for-each (lambda (i)
-              (match ((fd->current-port i))
-                ((? file-port? port)
-                 (dup port i))
-                ((? input-port? port)
-                 (dup (open-file "/dev/null" "r") i))
-                ((? output-port? port)
-                 (dup (open-file "/dev/null" "w") i))
-                (_ #t)))
+              (gc)
+              (let ((current-port (fd->current-port i)))
+                (match (current-port)
+                  ((? file-port? port)
+                   (let ((new (dup port i)))
+                     (redirect-port port new)))
+                  (#f #t))))
             (iota *fd-count*)))
 
 (define (exec-utility bindings path name args)
@@ -89,8 +88,14 @@ to @file{/dev/null}."
     ;; the buffer) produces its output.
     (flush-all-ports)
     (match (primitive-fork)
-      (0 (install-current-ports!)
-         (apply execle path utility-env name args))
+      (0
+       (dynamic-wind
+         (lambda ()
+           (install-current-ports!))
+         (lambda ()
+           (apply execle path utility-env name args))
+         (lambda ()
+           (primitive-exit 127))))
       (pid (match-let (((pid . status) (waitpid pid)))
              (set-status! (status:exit-val status)))))))
 
@@ -182,7 +187,10 @@ if it is our responsibility to close the port."
   (define* (make-processed-redir fd target #:optional (open-flags 0))
     (let ((port (match target
                   ((? port?) target)
-                  ((? string?) (open target open-flags))
+                  ((? string?)
+                   (let ((port (open target open-flags)))
+                     (set-port-revealed! port 10)
+                     port))
                   ;; TODO: Verify open-flags.
                   ((? integer?) ((fd->current-port target)))
                   (#f #f))))
@@ -213,6 +221,7 @@ if it is our responsibility to close the port."
      (make-processed-redir fd #f))
     (('<< (? integer? fd) text)
      (let ((port (tmpfile)))
+       (set-port-revealed! port 10)
        (display text port)
        (seek port 0 SEEK_SET)
        (make-processed-redir fd port)))))
@@ -264,6 +273,7 @@ process."
          (lambda () #t)
          (lambda ()
            (restore-signals)
+           (gc)
            (set-atexit! #f)
            ;; We need to preserve the status given to 'exit', so we
            ;; catch the 'quit' key here.
diff --git a/scripts/gash.in b/scripts/gash.in
index f851c1d..57506ba 100644
--- a/scripts/gash.in
+++ b/scripts/gash.in
@@ -21,5 +21,13 @@
 ;;; along with Gash.  If not, see <http://www.gnu.org/licenses/>.
 
 (define (main args)
+  ;; Reserve file descriptors 5 to 12 (roughly) before the signal and
+  ;; finalization threads grab them so that a script willing to use
+  ;; them can do so without breaking Guile.
+  (let loop ((i 3))
+    (when (<= i 10)
+      (open-fdes "/dev/null" (logior O_RDONLY O_CLOEXEC))
+      (loop (+ i 1))))
+
   (setenv "SHELL" ((compose canonicalize-path car command-line)))
-  ((@ (gash gash) main) (command-line)))
+  ((module-ref (resolve-interface '(gash gash)) 'main) (command-line)))

--=-=-=--




Information forwarded to bug-guix@HIDDEN:
bug#75658; Package guix. Full text available.

Message received at 75658 <at> debbugs.gnu.org:


Received: (at 75658) by debbugs.gnu.org; 16 Mar 2025 15:01:30 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Mar 16 11:01:30 2025
Received: from localhost ([127.0.0.1]:50311 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1ttpUW-000575-SG
	for submit <at> debbugs.gnu.org; Sun, 16 Mar 2025 11:01:30 -0400
Received: from hera.aquilenet.fr ([185.233.100.1]:41180)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <ludo@HIDDEN>) id 1ttpUS-00055I-9G
 for 75658 <at> debbugs.gnu.org; Sun, 16 Mar 2025 11:01:26 -0400
Received: from localhost (localhost [127.0.0.1])
 by hera.aquilenet.fr (Postfix) with ESMTP id EF0D2395;
 Sun, 16 Mar 2025 16:01:15 +0100 (CET)
Authentication-Results: hera.aquilenet.fr;
	none
X-Virus-Scanned: Debian amavis at hera.aquilenet.fr
Received: from hera.aquilenet.fr ([127.0.0.1])
 by localhost (hera.aquilenet.fr [127.0.0.1]) (amavis, port 10024) with ESMTP
 id Vej31GerxxsK; Sun, 16 Mar 2025 16:01:15 +0100 (CET)
Received: from ribbon (91-160-117-201.subs.proxad.net [91.160.117.201])
 by hera.aquilenet.fr (Postfix) with ESMTPSA id A9C281BE;
 Sun, 16 Mar 2025 16:01:14 +0100 (CET)
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludo@HIDDEN>
To: Timothy Sample <samplet@HIDDEN>
Subject: Re: bug#75658: Non-deterministic Gash error in
 =?utf-8?Q?=E2=80=98gcc-mesboot-4=2E9=2E4=E2=80=99?=
In-Reply-To: <87senex4m0.fsf@HIDDEN> (Timothy Sample's message of "Fri, 14
 Mar 2025 23:08:55 -0600")
References: <87msfnsrli.fsf@HIDDEN> <87wmeqpspy.fsf@HIDDEN>
 <87bju7i6rr.fsf@HIDDEN> <871pv0wkfu.fsf@HIDDEN>
 <87senex4m0.fsf@HIDDEN>
Date: Sun, 16 Mar 2025 16:01:14 +0100
Message-ID: <87wmcpnhol.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Rspamd-Queue-Id: EF0D2395
X-Spamd-Result: default: False [-6.10 / 15.00]; BAYES_HAM(-3.00)[100.00%];
 NEURAL_HAM(-3.00)[-1.000]; MIME_GOOD(-0.10)[text/plain];
 FROM_EQ_ENVFROM(0.00)[]; MIME_TRACE(0.00)[0:+];
 RCVD_COUNT_TWO(0.00)[2]; ARC_NA(0.00)[];
 TO_MATCH_ENVRCPT_ALL(0.00)[]; TO_DN_SOME(0.00)[];
 RCVD_VIA_SMTP_AUTH(0.00)[]; RCVD_TLS_ALL(0.00)[];
 FROM_HAS_DN(0.00)[]; RCPT_COUNT_THREE(0.00)[3];
 MID_RHS_MATCH_FROM(0.00)[]
X-Rspamd-Action: no action
X-Spamd-Bar: ------
X-Rspamd-Server: hera
X-Spam-Score: 1.0 (+)
X-Debbugs-Envelope-To: 75658
Cc: 75658 <at> debbugs.gnu.org, Janneke Nieuwenhuizen <janneke@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.0 (/)

Hello Timothy,

Thanks for chiming in.

Timothy Sample <samplet@HIDDEN> skribis:

> And here=E2=80=99s a reproducer:
>
>   (let loop ()
>     (define fd #f)
>     (let ((P (open-input-file "/dev/null")))
>       ;; Does not change the revealed count of P.
>       (set! fd (fileno P)))
>     (let ((port (open-input-file "/dev/null")))
>       (dup->port port "r" fd)
>       (close-port port)
>       (loop)))
>
> This results in EBADF in seemingly exactly the same way.  (I had to run
> it a few times: sometimes it runs out of file descriptors first.)  This
> happens on bootstrap Guile (2.0.9) and modern Guile.

Nice reproducer; I fully agree with your analysis.

See3in that =E2=80=98install-current-ports!=E2=80=99 creates temporary port=
s (via =E2=80=98dup=E2=80=99)
for no reason since nobody captures their reference and they get GC=E2=80=
=99d
soon after, I rewrote it like this:

--8<---------------cut here---------------start------------->8---
(define (install-current-ports!)
  "Install all current ports into their usual file descriptors.  For
example, if @code{current-input-port} is a @code{file-port?}, make the
process file descriptor 0 refer to the file open for
@code{current-input-port}.  If any current port is a @code{port?} but
not a @code{file-port?}, its corresponding file descriptor will refer
to @file{/dev/null}."
  ;; XXX: Input/output ports?  Closing other FDs?
  (for-each (lambda (i)
              (gc)  ;to trigger bugs
              (let ((current-port (fd->current-port i)))
                (match (current-port)
                  ((? file-port? port)
                   (dup->fdes port i))
                  (#f #t))))
            (iota *fd-count*)))
--8<---------------cut here---------------end--------------->8---

But this illustrates another problem: in the child process, right before
=E2=80=98execve=E2=80=99, the finalization thread may be restarted, in whic=
h case it
creates a new pipe.

In the example below, the finalization pipe is on FDs 9 and 7, but
=E2=80=98install-current-ports!=E2=80=99 blindly dups to FD 7, thereby clos=
ing one end
of the finalization pipe that was just created:

--8<---------------cut here---------------start------------->8---
23647 pipe2([7, 9], O_CLOEXEC)          =3D 0
23647 rt_sigprocmask(SIG_BLOCK, ~[], [], 8) =3D 0
23647 clone3({flags=3DCLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THR=
EAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, ch=
ild_tid=3D0x7f84204b3990, parent_tid=3D0x7f84204b3990, exit_signal=3D0, sta=
ck=3D0x7f841fb24000, stack_size=3D0x98ef80, tls=3D0x7f84204b36c0} =3D> {par=
ent_tid=3D[23648]}, 88) =3D 23648
[=E2=80=A6]
23647 write(9, "\0", 1)                 =3D 1
23648 <... read resumed>"\0", 1)        =3D 1
23648 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) =3D 0
23648 read(7,  <unfinished ...>
23647 clock_gettime(CLOCK_PROCESS_CPUTIME_ID, {tv_sec=3D0, tv_nsec=3D358458=
39}) =3D 0
23647 dup2(12, 7)                       =3D 7
23647 fcntl(7, F_GETFL)                 =3D 0x8002 (flags O_RDWR|O_LARGEFIL=
E)
23647 lseek(7, 0, SEEK_CUR)             =3D -1 ESPIPE (Illegal seek)
23647 dup2(12, 7)                       =3D 7
23647 clock_gettime(CLOCK_PROCESS_CPUTIME_ID, {tv_sec=3D0, tv_nsec=3D358993=
20}) =3D 0
23647 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) =3D 0
23647 madvise(0x7f842207c000, 12288, MADV_DONTNEED) =3D 0
23647 write(9, "\0", 1)                 =3D 1
23648 <... read resumed>"\0", 1)        =3D 1
23648 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) =3D 0
23648 read(7,  <unfinished ...>
23647 clock_gettime(CLOCK_PROCESS_CPUTIME_ID, {tv_sec=3D0, tv_nsec=3D395398=
30}) =3D 0
23647 clock_gettime(CLOCK_PROCESS_CPUTIME_ID, {tv_sec=3D0, tv_nsec=3D395559=
97}) =3D 0
23647 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) =3D 0
23647 madvise(0x7f842207c000, 12288, MADV_DONTNEED) =3D 0
23647 madvise(0x7f8421d74000, 8192, MADV_DONTNEED) =3D 0
23647 write(9, "\0", 1)                 =3D -1 EPIPE (Broken pipe)
23647 --- SIGPIPE {si_signo=3DSIGPIPE, si_code=3DSI_USER, si_pid=3D23647, s=
i_uid=3D1000} ---
--8<---------------cut here---------------end--------------->8---

After that dup2(12, 7) call, writing to the finalization pipe yields
SIGPIPE, which terminates the process (here it corresponds to a subshell
running =E2=80=98expr=E2=80=99).

Since we=E2=80=99re going to exec right after fork, we could turn off
finalization around =E2=80=98primitive-fork=E2=80=99 such that the child do=
esn=E2=80=99t attempt
to restart the finalization thread before exec.  The Shepherd has code
like this:

--8<---------------cut here---------------start------------->8---
(define %set-automatic-finalization-enabled?!
  ;; When using a statically-linked Guile, for instance in the initrd, we
  ;; cannot resolve this symbol, but most of the time we don't need it
  ;; anyway.  Thus, delay it.
  (let ((proc (delay
                (pointer->procedure int
                                    (dynamic-func
                                     "scm_set_automatic_finalization_enable=
d"
                                     (dynamic-link))
                                    (list int)))))
    (lambda (enabled?)
      "Switch on or off automatic finalization in a separate thread.
Turning finalization off shuts down the finalization thread as a side effec=
t."
      (->bool ((force proc) (if enabled? 1 0))))))

(define-syntax-rule (without-automatic-finalization exp ...)
  "Turn off automatic finalization within the dynamic extent of EXP."
  (let ((enabled? #t))
    (dynamic-wind
      (lambda ()
        (set! enabled? (%set-automatic-finalization-enabled?! #f)))
      (lambda ()
        exp ...)
      (lambda ()
        (%set-automatic-finalization-enabled?! enabled?)))))
--8<---------------cut here---------------end--------------->8---

Problem is, we cannot use the FFI on the statically-linked Guile.

We could implement fork+exec in C, but we don=E2=80=99t have a C compiler at
this early bootstrap stage.

Thoughts?

Ludo=E2=80=99.




Information forwarded to bug-guix@HIDDEN:
bug#75658; Package guix. Full text available.

Message received at 75658 <at> debbugs.gnu.org:


Received: (at 75658) by debbugs.gnu.org; 15 Mar 2025 05:09:11 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Mar 15 01:09:10 2025
Received: from localhost ([127.0.0.1]:37620 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1ttJlm-00060v-Cp
	for submit <at> debbugs.gnu.org; Sat, 15 Mar 2025 01:09:10 -0400
Received: from fhigh-b8-smtp.messagingengine.com ([202.12.124.159]:39075)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <samplet@HIDDEN>) id 1ttJlg-00060I-7r
 for 75658 <at> debbugs.gnu.org; Sat, 15 Mar 2025 01:09:08 -0400
Received: from phl-compute-09.internal (phl-compute-09.phl.internal
 [10.202.2.49])
 by mailfhigh.stl.internal (Postfix) with ESMTP id 38CFB25400D8;
 Sat, 15 Mar 2025 01:08:58 -0400 (EDT)
Received: from phl-mailfrontend-02 ([10.202.2.163])
 by phl-compute-09.internal (MEProxy); Sat, 15 Mar 2025 01:08:58 -0400
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ngyro.com; h=cc
 :cc:content-transfer-encoding:content-type:content-type:date
 :date:from:from:in-reply-to:in-reply-to:message-id:mime-version
 :references:reply-to:subject:subject:to:to; s=fm2; t=1742015338;
 x=1742101738; bh=twzkuZ/11mpZTKj6NmrQcedHprhKj9ljXct0gffJISI=; b=
 WDZJ2DUfh7rSYJyuRUYGDX1UYqROuvd9pXKvn/1mWUrugizYz7N1VEGf01O9c1Yw
 GF4T1gFRov+BG92iCTJeulvY37nrXYLOlLPoywPxITO6VsmM8ey/K2W7n22nHFPz
 1m9E9hppXS0dVgRHuGENah6QuQ7Nac0XyPM8Xr8nBkiy5II7Sm5akKig6T/VPFOS
 Xf8MBXHTYNXOG9C0KO46WJxXX0hte9IvaF1fvxE+mmbfd1i5Tkeg1N3xYr8Zftn1
 Iud/CYRUEUXdP4lCHaV6Wfm8GO5h+sKnzuAwEGpPcNmqZTnROF7Q9GC2zoQSVi0M
 AVMatLj5VjiSFlPyP/dwPQ==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
 messagingengine.com; h=cc:cc:content-transfer-encoding
 :content-type:content-type:date:date:feedback-id:feedback-id
 :from:from:in-reply-to:in-reply-to:message-id:mime-version
 :references:reply-to:subject:subject:to:to:x-me-proxy
 :x-me-sender:x-me-sender:x-sasl-enc; s=fm1; t=1742015338; x=
 1742101738; bh=twzkuZ/11mpZTKj6NmrQcedHprhKj9ljXct0gffJISI=; b=d
 a/62xfiTj5MvpVloRxas9fc7PUcdQ/HshLugXgZbXK92Bk73Do7Ap6XHIDMsVzkG
 4//GGRQ6f8F3Do/ILLaS/cW1tV1ocKag3m9ODMb/gySOa+jfUhQVsgV12xfYlrv/
 PeP18j5x+L2Bcx/SM0g3d3Re+Wgm1vFa+dIjfrqhccbI0X2RlOwNu57ACSd9EIfK
 6wpGTnxwkH3ojAemntR6r38vT+x/rESKiugSoYHH21Gf9D38JY2JIn0OIPoHNStR
 Bhg1iAlqMSXi7NV8mJChq6q5ZpXN9RLflWOiH600XGTAtNffETCnVLks8k4e9elh
 YAqPuBXa9VOmuUKkuiU+A==
X-ME-Sender: <xms:aQvVZ-MPcdI3RcSKeDoFD5d3llABjc5EOQW7gRZLeqws77k0DM6PwQ>
 <xme:aQvVZ8_Ro_UpA2N1NOv2ID9O2-ZKCHcldKMYFebPSQjZgWbWx9ae6utpMv2_fW5VY
 UjIdwV_WOiUfPIy2Q>
X-ME-Received: <xmr:aQvVZ1SndKlDQrJrRFk5raVsK29Qb2jA25BY7fbJiPTGJZQiW8wuIIo6bA>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgddufedvkeegucetufdoteggodetrf
 dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggv
 pdfurfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpih
 gvnhhtshculddquddttddmnecujfgurhephffvvefujghffffkfgggtgfgsehtqhertddt
 reejnecuhfhrohhmpefvihhmohhthhihucfurghmphhlvgcuoehsrghmphhlvghtsehngh
 ihrhhordgtohhmqeenucggtffrrghtthgvrhhnpeetfeffffettdelveekgfeffeevudeh
 hedtffdvfffhudethfefvdduudejlefhvdenucevlhhushhtvghrufhiiigvpedtnecurf
 grrhgrmhepmhgrihhlfhhrohhmpehsrghmphhlvghtsehnghihrhhordgtohhmpdhnsggp
 rhgtphhtthhopeefpdhmohguvgepshhmthhpohhuthdprhgtphhtthhopehjrghnnhgvkh
 gvsehgnhhurdhorhhgpdhrtghpthhtohepjeehieehkeesuggvsggsuhhgshdrghhnuhdr
 ohhrghdprhgtphhtthhopehluhguohesghhnuhdrohhrgh
X-ME-Proxy: <xmx:aQvVZ-siVFPmlg5ihnY4N3len-ar93iVzexmAHBZ2jHyKQNUMskkMw>
 <xmx:aQvVZ2fEGUlSNEckwaURVPq0JQCKeg0IXo3Q48wFwQAdwf79XWyi4Q>
 <xmx:aQvVZy3GRyhuGHXdu9_OeOmhJsucFSKzBbPH2fSwqDqIYss73TLoBw>
 <xmx:aQvVZ69gtcxrJaAmsQS_0qqNa5TdHLv4_BNFbIMBLzkbv2vHvXTKIw>
 <xmx:agvVZ27kf0JYe3UXNOCWgGmsLz6GnVMe7RvUxnuOd0lHSQ25UnLmpazI>
Feedback-ID: i4721425c:Fastmail
Received: by mail.messagingengine.com (Postfix) with ESMTPA; Sat,
 15 Mar 2025 01:08:56 -0400 (EDT)
From: Timothy Sample <samplet@HIDDEN>
To: Ludovic =?utf-8?Q?Court=C3=A8s?= <ludo@HIDDEN>
Subject: Re: bug#75658: Non-deterministic Gash error in
 =?utf-8?Q?=E2=80=98gcc-mesboot-4=2E9=2E4=E2=80=99?=
In-Reply-To: <871pv0wkfu.fsf@HIDDEN> ("Ludovic =?utf-8?Q?Court=C3=A8s=22'?=
 =?utf-8?Q?s?= message of "Fri, 14 Mar 2025 01:00:05 +0100")
References: <87msfnsrli.fsf@HIDDEN> <87wmeqpspy.fsf@HIDDEN>
 <87bju7i6rr.fsf@HIDDEN> <871pv0wkfu.fsf@HIDDEN>
Date: Fri, 14 Mar 2025 23:08:55 -0600
Message-ID: <87senex4m0.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 75658
Cc: 75658 <at> debbugs.gnu.org, Janneke Nieuwenhuizen <janneke@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)


Ludovic Court=C3=A8s <ludo@HIDDEN> writes:

> I was able to capture an strace log of this:
>
> 15837 clone(child_stack=3DNULL, flags=3DCLONE_CHILD_CLEARTID|CLONE_CHILD_=
SETTID|SIGCHLD, child_tidptr=3D0x7fb10dad7850) =3D 15838
> 15838 set_robust_list(0x7fb10dad7860, 24) =3D 0
> 15837 wait4(15838,  <unfinished ...>
> 15838 close(3)                          =3D 0
> 15838 close(4)                          =3D 0
> 15838 pipe2([3, 4], O_CLOEXEC)          =3D 0
> [...]
> 15838 clone3({flags=3DCLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_T=
HREAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, =
child_tid=3D0x7fb10beaa990, parent_tid=3D0x7fb10beaa990, exit_signal=3D0, s=
tack=3D0x7fb10b51b000, stack_size=3D0x98ef80, tls=3D0x7fb10beaa6c0} =3D> {p=
arent_tid=3D[15839]}, 88) =3D 15839
> 15839 rseq(0x7fb10beaafe0, 0x20, 0, 0x53053053 <unfinished ...>
> 15838 rt_sigprocmask(SIG_SETMASK, [],  <unfinished ...>
> [...]
> 15838 lseek(2, 0, SEEK_CUR)             =3D -1 ESPIPE (Illegal seek)
> 15839 close(10)                         =3D 0
> 15839 close(17 <unfinished ...>
> 15838 dup2(22, 6 <unfinished ...>
> 15839 <... close resumed>)              =3D 0
> 15838 <... dup2 resumed>)               =3D 6
> 15839 close(6 <unfinished ...>
> 15838 fcntl(6, F_GETFL <unfinished ...>
> 15839 <... close resumed>)              =3D 0
> 15838 <... fcntl resumed>)              =3D -1 EBADF (Bad file descriptor)
> 15839 close(7)                          =3D 0
> 15839 close(18)                         =3D 0
> 15839 close(15)                         =3D 0
> 15839 close(12)                         =3D 0
> 15839 close(9)                          =3D 0
> 15839 close(16)                         =3D 0
> 15838 write(2, "Backtrace:\n", 11)      =3D 11
>
> The sequence goes like this:
>
>   1. A child process (15837) corresponding to the subshell is created;
>
>   2. That process creates a finalization thread (15839);
>
>   3. Main thread does dup2(22, 6); finalization does close(6); main
>      thread does fcntl(6, F_GETFL), which fails with EBADF.
>
> I suspect something like a wrong revealed count on the relevant ports,
> possibly those created in =E2=80=98install-current-ports!=E2=80=99.

In =E2=80=9Cboot-9.scm=E2=80=9D, we have

  (define dup->port
    (case-lambda
      ((port/fd mode)
       (fdopen (dup->fdes port/fd) mode))
      ((port/fd mode new-fd)
       (let ((port (fdopen (dup->fdes port/fd new-fd) mode)))
         (set-port-revealed! port 1)
         port))))

It looks like the system calls on the main thread correspond to this
code (which is called from =E2=80=98install-current-ports!=E2=80=99 via =E2=
=80=98dup=E2=80=99).
Specifically, =E2=80=98dup2=E2=80=99 is called from =E2=80=98dup->fdes=E2=
=80=99 and =E2=80=98fcntl=E2=80=99 is called
from =E2=80=98fdopen=E2=80=99.

The way that =E2=80=98dup->fdes=E2=80=99 works is that it first makes sure =
that no
existing port has the desired file descriptor (=E2=80=98scm_evict_ports=E2=
=80=99), and
then calls =E2=80=98dup2=E2=80=98.  This should mean that the requested fil=
e descriptor
is up for grabs.

Here=E2=80=99s my guess as to what=E2=80=98s happening.  For brevity let=E2=
=80=99s call the port
with file descriptor 6 =E2=80=9CP=E2=80=9D.

  1. The GC runs, nullifying the entry for P in the port table (weak key
  hash table), and queuing its finalizer.

  2. The evict ports loop runs, missing P because it was nullified (see
  =E2=80=98scm_internal_hash_fold=E2=80=99).

  3. =E2=80=98dup2=E2=80=99 turns 22 to 6.

  4. The finalizer for P runs, closing 6.

  5. =E2=80=98fdopen=E2=80=99 calls =E2=80=98fcntl=E2=80=99 on 6, which res=
ults in EBADF.

And here=E2=80=99s a reproducer:

  (let loop ()
    (define fd #f)
    (let ((P (open-input-file "/dev/null")))
      ;; Does not change the revealed count of P.
      (set! fd (fileno P)))
    (let ((port (open-input-file "/dev/null")))
      (dup->port port "r" fd)
      (close-port port)
      (loop)))

This results in EBADF in seemingly exactly the same way.  (I had to run
it a few times: sometimes it runs out of file descriptors first.)  This
happens on bootstrap Guile (2.0.9) and modern Guile.

That=E2=80=99s all I have for now.  I=E2=80=99m not sure how to avoid this =
without
resorting to calling =E2=80=9C(gc)=E2=80=9D to synchronously run the finali=
zers before
trying to mess with the file descriptors.


-- Tim




Information forwarded to bug-guix@HIDDEN:
bug#75658; Package guix. Full text available.

Message received at 75658 <at> debbugs.gnu.org:


Received: (at 75658) by debbugs.gnu.org; 14 Mar 2025 00:00:19 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 13 20:00:19 2025
Received: from localhost ([127.0.0.1]:58945 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tssTK-000814-Jg
	for submit <at> debbugs.gnu.org; Thu, 13 Mar 2025 20:00:19 -0400
Received: from hera.aquilenet.fr ([185.233.100.1]:36780)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <ludo@HIDDEN>) id 1tssTH-0007zB-HJ
 for 75658 <at> debbugs.gnu.org; Thu, 13 Mar 2025 20:00:16 -0400
Received: from localhost (localhost [127.0.0.1])
 by hera.aquilenet.fr (Postfix) with ESMTP id 95EA962D;
 Fri, 14 Mar 2025 01:00:08 +0100 (CET)
Authentication-Results: hera.aquilenet.fr;
	none
X-Virus-Scanned: Debian amavis at hera.aquilenet.fr
Received: from hera.aquilenet.fr ([127.0.0.1])
 by localhost (hera.aquilenet.fr [127.0.0.1]) (amavis, port 10024) with ESMTP
 id SwI-jKDg4AzW; Fri, 14 Mar 2025 01:00:08 +0100 (CET)
Received: from ribbon (unknown [83.118.207.42])
 by hera.aquilenet.fr (Postfix) with ESMTPSA id 693D95B8;
 Fri, 14 Mar 2025 01:00:06 +0100 (CET)
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludo@HIDDEN>
To: 75658 <at> debbugs.gnu.org
Subject: Re: bug#75658: Non-deterministic Gash error in
 =?utf-8?Q?=E2=80=98gcc-mesboot-4=2E9=2E4=E2=80=99?=
In-Reply-To: <87bju7i6rr.fsf@HIDDEN> ("Ludovic =?utf-8?Q?Court=C3=A8s=22'?=
 =?utf-8?Q?s?= message of "Tue, 11 Mar 2025 22:42:16 +0100")
References: <87msfnsrli.fsf@HIDDEN> <87wmeqpspy.fsf@HIDDEN>
 <87bju7i6rr.fsf@HIDDEN>
Date: Fri, 14 Mar 2025 01:00:05 +0100
Message-ID: <871pv0wkfu.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Rspamd-Server: hera
X-Rspamd-Queue-Id: 95EA962D
X-Spamd-Result: default: False [4.90 / 15.00]; SPAM_FLAG(5.00)[];
 BAYES_HAM(-3.00)[100.00%]; NEURAL_SPAM(3.00)[1.000];
 MIME_GOOD(-0.10)[text/plain]; MIME_TRACE(0.00)[0:+];
 RCVD_COUNT_TWO(0.00)[2]; FROM_EQ_ENVFROM(0.00)[];
 ARC_NA(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[];
 TO_DN_SOME(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[];
 RCVD_TLS_ALL(0.00)[]; FROM_HAS_DN(0.00)[];
 RCPT_COUNT_THREE(0.00)[3]; MID_RHS_MATCH_FROM(0.00)[]
X-Spamd-Bar: ++++
X-Rspamd-Action: no action
X-Spam-Level: ****
X-Spam-Score: 1.0 (+)
X-Debbugs-Envelope-To: 75658
Cc: Timothy Sample <samplet@HIDDEN>, Janneke Nieuwenhuizen <janneke@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.0 (/)

Ludovic Court=C3=A8s <ludo@HIDDEN> skribis:

> In gash/shell.scm:
>  289: 9 [sh:substitute-command #<procedure 2da0f560 at gash/eval.scm:129:=
35 ()>]
>  270: 8 [%subshell #<procedure v ()>]
> In ice-9/boot-9.scm:
>  157: 7 [catch quit #<procedure v ()> ...]
> In ice-9/r4rs.scm:
>  176: 6 [with-output-to-port #<variable 2de5dc00 value: #<output: file /d=
ev/pts/19>> ...]
> In srfi/srfi-1.scm:
>  619: 5 [for-each #<procedure eval-sh (exp)> ((<sh-exec> "expr" # ":" ...=
))]
> In gash/shell.scm:
>  129: 4 [sh:exec-let () "expr" ...]
>   92: 3 [exec-utility () ...]
> In srfi/srfi-1.scm:
>  616: 2 [for-each #<procedure 2d60f0a0 at gash/shell.scm:70:12 (i)> (0 1 =
2 ...)]
> In ice-9/boot-9.scm:
> 1473: 1 [dup->port #<input: file /dev/pts/19> "r0" 7]
> In unknown file:
>    ?: 0 [fdopen 7 "r0"]
>
> ERROR: In procedure fdopen:
> ERROR: In procedure scm_fdes_to_port: Bad file descriptor

I was able to capture an strace log of this:

--8<---------------cut here---------------start------------->8---
15837 clone(child_stack=3DNULL, flags=3DCLONE_CHILD_CLEARTID|CLONE_CHILD_SE=
TTID|SIGCHLD, child_tidptr=3D0x7fb10dad7850) =3D 15838
15838 set_robust_list(0x7fb10dad7860, 24) =3D 0
15837 wait4(15838,  <unfinished ...>
15838 close(3)                          =3D 0
15838 close(4)                          =3D 0
15838 pipe2([3, 4], O_CLOEXEC)          =3D 0
[...]
15838 clone3({flags=3DCLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THR=
EAD|CLONE_SYSVSEM|CLONE_SETTLS|CLONE_PARENT_SETTID|CLONE_CHILD_CLEARTID, ch=
ild_tid=3D0x7fb10beaa990, parent_tid=3D0x7fb10beaa990, exit_signal=3D0, sta=
ck=3D0x7fb10b51b000, stack_size=3D0x98ef80, tls=3D0x7fb10beaa6c0} =3D> {par=
ent_tid=3D[15839]}, 88) =3D 15839
15839 rseq(0x7fb10beaafe0, 0x20, 0, 0x53053053 <unfinished ...>
15838 rt_sigprocmask(SIG_SETMASK, [],  <unfinished ...>
[...]
15838 lseek(2, 0, SEEK_CUR)             =3D -1 ESPIPE (Illegal seek)
15839 close(10)                         =3D 0
15839 close(17 <unfinished ...>
15838 dup2(22, 6 <unfinished ...>
15839 <... close resumed>)              =3D 0
15838 <... dup2 resumed>)               =3D 6
15839 close(6 <unfinished ...>
15838 fcntl(6, F_GETFL <unfinished ...>
15839 <... close resumed>)              =3D 0
15838 <... fcntl resumed>)              =3D -1 EBADF (Bad file descriptor)
15839 close(7)                          =3D 0
15839 close(18)                         =3D 0
15839 close(15)                         =3D 0
15839 close(12)                         =3D 0
15839 close(9)                          =3D 0
15839 close(16)                         =3D 0
15838 write(2, "Backtrace:\n", 11)      =3D 11
--8<---------------cut here---------------end--------------->8---

The sequence goes like this:

  1. A child process (15837) corresponding to the subshell is created;

  2. That process creates a finalization thread (15839);

  3. Main thread does dup2(22, 6); finalization does close(6); main
     thread does fcntl(6, F_GETFL), which fails with EBADF.

I suspect something like a wrong revealed count on the relevant ports,
possibly those created in =E2=80=98install-current-ports!=E2=80=99.

Ludo=E2=80=99.




Information forwarded to bug-guix@HIDDEN:
bug#75658; Package guix. Full text available.

Message received at 75658 <at> debbugs.gnu.org:


Received: (at 75658) by debbugs.gnu.org; 11 Mar 2025 21:42:30 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Mar 11 17:42:30 2025
Received: from localhost ([127.0.0.1]:46123 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1ts7Mr-0004qb-Dk
	for submit <at> debbugs.gnu.org; Tue, 11 Mar 2025 17:42:30 -0400
Received: from hera.aquilenet.fr ([185.233.100.1]:52944)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <ludo@HIDDEN>) id 1ts7Mp-0004qN-Dk
 for 75658 <at> debbugs.gnu.org; Tue, 11 Mar 2025 17:42:28 -0400
Received: from localhost (localhost [127.0.0.1])
 by hera.aquilenet.fr (Postfix) with ESMTP id 98EB7420;
 Tue, 11 Mar 2025 22:42:20 +0100 (CET)
Authentication-Results: hera.aquilenet.fr;
	none
X-Virus-Scanned: Debian amavis at hera.aquilenet.fr
Received: from hera.aquilenet.fr ([127.0.0.1])
 by localhost (hera.aquilenet.fr [127.0.0.1]) (amavis, port 10024) with ESMTP
 id 2MrHQ3sTNoRK; Tue, 11 Mar 2025 22:42:19 +0100 (CET)
Received: from ribbon (unknown [83.118.207.42])
 by hera.aquilenet.fr (Postfix) with ESMTPSA id BFAE31AA;
 Tue, 11 Mar 2025 22:42:18 +0100 (CET)
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludo@HIDDEN>
To: 75658 <at> debbugs.gnu.org
Subject: Re: bug#75658: Non-deterministic Gash error in
 =?utf-8?Q?=E2=80=98gcc-mesboot-4=2E9=2E4=E2=80=99?=
In-Reply-To: <87wmeqpspy.fsf@HIDDEN> ("Ludovic =?utf-8?Q?Court=C3=A8s=22'?=
 =?utf-8?Q?s?= message of "Sun, 19 Jan 2025 19:24:25 +0100")
References: <87msfnsrli.fsf@HIDDEN> <87wmeqpspy.fsf@HIDDEN>
Date: Tue, 11 Mar 2025 22:42:16 +0100
Message-ID: <87bju7i6rr.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Rspamd-Server: hera
X-Rspamd-Queue-Id: 98EB7420
X-Spamd-Result: default: False [4.86 / 15.00]; SPAM_FLAG(5.00)[];
 BAYES_HAM(-3.00)[100.00%]; NEURAL_SPAM(2.96)[0.987];
 MIME_GOOD(-0.10)[text/plain]; MIME_TRACE(0.00)[0:+];
 RCVD_COUNT_TWO(0.00)[2]; FROM_EQ_ENVFROM(0.00)[];
 ARC_NA(0.00)[]; TO_MATCH_ENVRCPT_ALL(0.00)[];
 TO_DN_SOME(0.00)[]; RCVD_VIA_SMTP_AUTH(0.00)[];
 RCVD_TLS_ALL(0.00)[]; FROM_HAS_DN(0.00)[];
 RCPT_COUNT_THREE(0.00)[3]; MID_RHS_MATCH_FROM(0.00)[]
X-Spamd-Bar: ++++
X-Rspamd-Action: no action
X-Spam-Level: ****
X-Spam-Score: 1.0 (+)
X-Debbugs-Envelope-To: 75658
Cc: Timothy Sample <samplet@HIDDEN>, Janneke Nieuwenhuizen <janneke@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.0 (/)

Ludovic Court=C3=A8s <ludo@HIDDEN> skribis:

> Ludovic Court=C3=A8s <ludovic.courtes@HIDDEN> skribis:
>
>> I stumbled upon this interesting non-deterministic failure while
>> building =E2=80=98gcc-mesboot-4.9.4.drv=E2=80=99 on current =E2=80=98cor=
e-packages-team=E2=80=99 (which
>> is unchanged compared to =E2=80=98master=E2=80=99):
>
> Just got another one:

A few more, obtained by running the start of the =E2=80=98configure=E2=80=
=99 script in a
loop (added an =E2=80=98exit=E2=80=99 on line 2562, which is after the firs=
t 4 lines of
output).

  while ./configure CONFIG_SHELL=3D/gnu/store/98bd49rhyia49y0b9d7sk8phsq14g=
3nk-gash-boot-0.3.0/bin/bash SHELL=3D/gnu/store/98bd49rhyia49y0b9d7sk8phsq1=
4g3nk-gash-boot-0.3.0/bin/bash --prefix=3D/gnu/store/awkbdj5j41pv5kiy9ifs0z=
l40jamwfw4-gcc-mesboot-4.9.4 --enable-fast-install --build=3Dx86_64-unknown=
-linux-gnu --prefix=3D/gnu/store/awkbdj5j41pv5kiy9ifs0zl40jamwfw4-gcc-mesbo=
ot-4.9.4 --build=3Di686-unknown-linux-gnu --host=3Di686-unknown-linux-gnu -=
-with-host-libstdcxx=3D-lsupc++ --with-native-system-header-dir=3D/gnu/stor=
e/gc91zbacrk6prhvm91cj3x9rr3v2k17q-glibc-mesboot-2.16.0/include --with-buil=
d-sysroot=3D/gnu/store/gc91zbacrk6prhvm91cj3x9rr3v2k17q-glibc-mesboot-2.16.=
0/include --disable-bootstrap --disable-decimal-float --disable-libatomic -=
-disable-libcilkrts --disable-libgomp --disable-libitm --disable-libmudflap=
 --disable-libquadmath --disable-libsanitizer --disable-libssp --disable-li=
bvtv --disable-lto --disable-lto-plugin --disable-multilib --disable-plugin=
 --disable-threads --enable-languages=3Dc,c++ --enable-static --enable-shar=
ed --enable-threads=3Dsingle --disable-libstdcxx-pch --disable-build-with-c=
xx ; do : ;done

--8<---------------cut here---------------start------------->8---
warning: failed to install locale: Invalid argument
Backtrace:
In gash/environment.scm:
 371: 19 [call-with-break #<procedure 2dda9450 at gash/shell.scm:400:6 ()>]
In srfi/srfi-1.scm:
 619: 18 [for-each #<procedure 2dda9420 at gash/shell.scm:401:18 (value)> #]
In gash/environment.scm:
 353: 17 [call-with-continue #<procedure 2de13460 at gash/eval.scm:158:14 (=
)>]
In srfi/srfi-1.scm:
 616: 16 [for-each #<procedure eval-sh (exp)> (# # #)]
 619: 15 [for-each #<procedure eval-sh (exp)> ((<sh-set!> ("ac_optarg" #)))]
In gash/eval.scm:
 221: 14 [eval-sh (<sh-set!> ("ac_optarg" (<sh-cmd-sub> #)))]
In srfi/srfi-1.scm:
 642: 13 [for-each #<procedure 2da0f5e0 at gash/eval.scm:221:17 (name word)=
> # #]
In gash/eval.scm:
 222: 12 [#<procedure 2da0f5e0 at gash/eval.scm:221:17 (name word)> "ac_opt=
arg" #]
 131: 11 [eval-word (<sh-cmd-sub> (<sh-exec> "expr" # ":" ...)) #:output st=
ring ...]
 121: 10 [expand-word (<sh-cmd-sub> (<sh-exec> "expr" # ...)) #:output ...]
In gash/shell.scm:
 289: 9 [sh:substitute-command #<procedure 2da0f560 at gash/eval.scm:129:35=
 ()>]
 270: 8 [%subshell #<procedure v ()>]
In ice-9/boot-9.scm:
 157: 7 [catch quit #<procedure v ()> ...]
In ice-9/r4rs.scm:
 176: 6 [with-output-to-port #<variable 2de5dc00 value: #<output: file /dev=
/pts/19>> ...]
In srfi/srfi-1.scm:
 619: 5 [for-each #<procedure eval-sh (exp)> ((<sh-exec> "expr" # ":" ...))]
In gash/shell.scm:
 129: 4 [sh:exec-let () "expr" ...]
  92: 3 [exec-utility () ...]
In srfi/srfi-1.scm:
 616: 2 [for-each #<procedure 2d60f0a0 at gash/shell.scm:70:12 (i)> (0 1 2 =
...)]
In ice-9/boot-9.scm:
1473: 1 [dup->port #<input: file /dev/pts/19> "r0" 7]
In unknown file:
   ?: 0 [fdopen 7 "r0"]

ERROR: In procedure fdopen:
ERROR: In procedure scm_fdes_to_port: Bad file descriptor
--8<---------------cut here---------------end--------------->8---

And:

--8<---------------cut here---------------start------------->8---
Backtrace:
In ice-9/boot-9.scm:
 157: 17 [catch #t #<catch-closure 25cdf0a0> ...]
In unknown file:
   ?: 16 [apply-smob/1 #<catch-closure 25cdf0a0>]
In ice-9/boot-9.scm:
  63: 15 [call-with-prompt prompt0 ...]
In ice-9/eval.scm:
 432: 14 [eval # #]
In ice-9/boot-9.scm:
 793: 13 [call-with-input-file "./configure" ...]
In gash/gash.scm:
 121: 12 [#<procedure 262f7700 at gash/gash.scm:120:19 (port)> #<input: ./c=
onfigure 5>]
In gash/repl.scm:
  38: 11 [run-repl #<input: ./configure 5> #f]
In gash/environment.scm:
 371: 10 [call-with-break #<procedure 26335c00 at gash/shell.scm:400:6 ()>]
In srfi/srfi-1.scm:
 616: 9 [for-each #<procedure 26335bd0 at gash/shell.scm:401:18 (value)> #]
In gash/environment.scm:
 353: 8 [call-with-continue #<procedure 26315260 at gash/eval.scm:158:14 ()=
>]
In srfi/srfi-1.scm:
 619: 7 [for-each #<procedure eval-sh (exp)> (# # #)]
In gash/shell.scm:
 441: 6 [sh:cond #]
  55: 5 [without-errexit #<procedure 26861c80 at gash/eval.scm:149:6 ()>]
 129: 4 [sh:exec-let () "test" "-n" ""]
  92: 3 [exec-utility () ...]
In srfi/srfi-1.scm:
 619: 2 [for-each #<procedure 26272b60 at gash/shell.scm:70:12 (i)> (0 1 2 =
...)]
In ice-9/boot-9.scm:
1473: 1 [dup->port #<output: file /dev/pts/19> "w0" 6]
In unknown file:
   ?: 0 [fdopen 6 "w0"]

ERROR: In procedure fdopen:
ERROR: In procedure scm_fdes_to_port: Bad file descriptor
--8<---------------cut here---------------end--------------->8---

And:

--8<---------------cut here---------------start------------->8---
Backtrace:
In ice-9/boot-9.scm:
 157: 13 [catch #t #<catch-closure 1879d00> ...]
In unknown file:
   ?: 12 [apply-smob/1 #<catch-closure 1879d00>]
In ice-9/boot-9.scm:
  63: 11 [call-with-prompt prompt0 ...]
In ice-9/eval.scm:
 432: 10 [eval # #]
In ice-9/boot-9.scm:
 793: 9 [call-with-input-file "./configure" ...]
In gash/gash.scm:
 121: 8 [#<procedure 1e905e0 at gash/gash.scm:120:19 (port)> #<input: ./con=
figure 5>]
In gash/repl.scm:
  38: 7 [run-repl #<input: ./configure 5> #f]
In gash/shell.scm:
 441: 6 [sh:cond #]
  55: 5 [without-errexit #<procedure 2192680 at gash/eval.scm:149:6 ()>]
 129: 4 [sh:exec-let () "test" "xi686-unknown-linux-gnu" "!=3D" "x"]
  92: 3 [exec-utility () ...]
In srfi/srfi-1.scm:
 619: 2 [for-each #<procedure 1e06920 at gash/shell.scm:70:12 (i)> (0 1 2 .=
..)]
In ice-9/boot-9.scm:
1473: 1 [dup->port #<output: file /dev/pts/19> "w0" 6]
In unknown file:
   ?: 0 [fdopen 6 "w0"]

ERROR: In procedure fdopen:
ERROR: In procedure scm_fdes_to_port: Bad file descriptor
--8<---------------cut here---------------end--------------->8---

All these happen before the line:

--8<---------------cut here---------------start------------->8---
checking build system type... i686-unknown-linux-gnu
--8<---------------cut here---------------end--------------->8---

Good news: I was able to reproduce with Gash over Guile 3.0.9:

--8<---------------cut here---------------start------------->8---
ludo@ribbon /tmp/guix-build-gcc-mesboot-4.9.4.drv-0/gcc-4.9.4$ guix build g=
ash
/gnu/store/mz5swdf35iwplrgdvm4z256py585nxi6-gash-0.3.0
ludo@ribbon /tmp/guix-build-gcc-mesboot-4.9.4.drv-0/gcc-4.9.4$ while /gnu/s=
tore/mz5swdf35iwplrgdvm4z256py585nxi6-gash-0.3.0/bin/gash ./configure CONFI=
G_SHELL=3D/gnu/store/98bd49rhyia49y0b9d7sk8phsq14g3nk-gash-boot-0.3.0/bin/b=
ash SHELL=3D/gnu/store/98bd49rhyia49y0b9d7sk8phsq14g3nk-gash-boot-0.3.0/bin=
/bash --prefix=3D/gnu/store/awkbdj5j41pv5kiy9ifs0zl40jamwfw4-gcc-mesboot-4.=
9.4 --enable-fast-install --build=3Dx86_64-unknown-linux-gnu --prefix=3D/gn=
u/store/awkbdj5j41pv5kiy9ifs0zl40jamwfw4-gcc-mesboot-4.9.4 --build=3Di686-u=
nknown-linux-gnu --host=3Di686-unknown-linux-gnu --with-host-libstdcxx=3D-l=
supc++ --with-native-system-header-dir=3D/gnu/store/gc91zbacrk6prhvm91cj3x9=
rr3v2k17q-glibc-mesboot-2.16.0/include --with-build-sysroot=3D/gnu/store/gc=
91zbacrk6prhvm91cj3x9rr3v2k17q-glibc-mesboot-2.16.0/include --disable-boots=
trap --disable-decimal-float --disable-libatomic --disable-libcilkrts --dis=
able-libgomp --disable-libitm --disable-libmudflap --disable-libquadmath --=
disable-libsanitizer --disable-libssp --disable-libvtv --disable-lto --disa=
ble-lto-plugin --disable-multilib --disable-plugin --disable-threads --enab=
le-languages=3Dc,c++ --enable-static --enable-shared --enable-threads=3Dsin=
gle --disable-libstdcxx-pch --disable-build-with-cxx ; do : ;done
[=E2=80=A6]
Backtrace:
In ice-9/boot-9.scm:
  1752:10 18 (with-exception-handler _ _ #:unwind? _ #:unwind-for-type _)
In unknown file:
          17 (apply-smob/0 #<thunk 7f8e78d15300>)
In ice-9/boot-9.scm:
    724:2 16 (call-with-prompt _ _ #<procedure default-prompt-handler (k pr=
oc)>)
In ice-9/eval.scm:
    619:8 15 (_ #(#(#<directory (guile-user) 7f8e78d18c80>)))
In ice-9/ports.scm:
   433:17 14 (call-with-input-file _ _ #:binary _ #:encoding _ #:guess-enco=
ding _)
In gash/gash.scm:
   121:27 13 (_ _)
In gash/repl.scm:
    38:14 12 (run-repl _ _)
In gash/environment.scm:
    375:8 11 (call-with-break _)
In srfi/srfi-1.scm:
    634:9 10 (for-each #<procedure 7f8e75612420 at gash/shell.scm:401:18 (v=
alue)> _)
In gash/environment.scm:
    357:8  9 (call-with-continue _)
In srfi/srfi-1.scm:
    634:9  8 (for-each #<procedure eval-sh (exp)> _)
    634:9  7 (for-each #<procedure eval-sh (exp)> _)
In gash/shell.scm:
    55:39  6 (sh:and _ #<procedure 7f8e75656da0 at gash/eval.scm:149:6 ()>)
   245:24  5 (_)
   159:10  4 (sh:exec-let _ "expr" . _)
     92:9  3 (exec-utility _ "/run/current-system/profile/bin/expr" "expr" =
("xliba=E2=80=A6" =E2=80=A6))
In srfi/srfi-1.scm:
    634:9  2 (for-each #<procedure 7f8e760654c0 at gash/shell.scm:70:12 (i)=
> _)
In ice-9/ports.scm:
   317:17  1 (dup->port _ _ _)
In unknown file:
           0 (fdopen 6 "w0")

ERROR: In procedure fdopen:
In procedure scm_fdes_to_port: Bad file descriptor
--8<---------------cut here---------------end--------------->8---

Enough backtraces for now.  To be continued=E2=80=A6

Ludo=E2=80=99.




Information forwarded to bug-guix@HIDDEN:
bug#75658; Package guix. Full text available.
Severity set to 'important' from 'normal' Request was from Ludovic Courtès <ludo@HIDDEN> to control <at> debbugs.gnu.org. Full text available.
Added indication that bug 75658 blocks75518 Request was from Ludovic Courtès <ludo@HIDDEN> to control <at> debbugs.gnu.org. Full text available.

Message received at 75658 <at> debbugs.gnu.org:


Received: (at 75658) by debbugs.gnu.org; 19 Jan 2025 18:24:52 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sun Jan 19 13:24:52 2025
Received: from localhost ([127.0.0.1]:47413 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tZZye-0001mI-3l
	for submit <at> debbugs.gnu.org; Sun, 19 Jan 2025 13:24:52 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10]:44154)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <ludo@HIDDEN>) id 1tZZyb-0001m1-R1
 for 75658 <at> debbugs.gnu.org; Sun, 19 Jan 2025 13:24:50 -0500
Received: from fencepost.gnu.org ([2001:470:142:3::e])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <ludo@HIDDEN>)
 id 1tZZyW-0001aD-5F; Sun, 19 Jan 2025 13:24:44 -0500
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=MIME-Version:Date:References:In-Reply-To:Subject:To:
 From; bh=rwfufuv4htGpobiT/bvtCiVlW78cIKadLK30pvdb7zg=; b=OBtBEJ02EPGRNjIpC9je
 5agKxiHn6tbzKi5WRHozyb0AHQANYaSRnf8EpMiszql2LH8KEgQM81nQgeCzStzIBoluXAP1TLm1+
 mHmSo/mkvrA9gO6hl5Nhs6ETjfCrx7XDYoNKdBR/DgeAykrVFKu120d8KUkdIbM7JmqqOQBLLXFI4
 x7gsgTR/wci0V85hh9P7AoMkexv2+8czMTFtO2vc+A+h8jYIXPTMB0N7On2ji2d/PZw5K8ei/wQB0
 VDMA3UFTCoBo4gLe1/W3BdCXDlXG/moJAJg+/JLGSQo/X7IHcVVeWyCHHOOIIMHwwT7bXcUgot0SI
 EIkq1Zo5vO6T3Q==;
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludo@HIDDEN>
To: 75658 <at> debbugs.gnu.org
Subject: Re: bug#75658: Non-deterministic Gash error in
 =?utf-8?Q?=E2=80=98gcc-mesboot-4=2E9=2E4=E2=80=99?=
In-Reply-To: <87msfnsrli.fsf@HIDDEN> ("Ludovic =?utf-8?Q?Court=C3=A8s=22?=
 =?utf-8?Q?'s?= message of "Sat, 18 Jan 2025 23:08:09 +0100")
References: <87msfnsrli.fsf@HIDDEN>
Date: Sun, 19 Jan 2025 19:24:25 +0100
Message-ID: <87wmeqpspy.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 75658
Cc: Timothy Sample <samplet@HIDDEN>, Janneke Nieuwenhuizen <janneke@HIDDEN>
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

Ludovic Court=C3=A8s <ludovic.courtes@HIDDEN> skribis:

> I stumbled upon this interesting non-deterministic failure while
> building =E2=80=98gcc-mesboot-4.9.4.drv=E2=80=99 on current =E2=80=98core=
-packages-team=E2=80=99 (which
> is unchanged compared to =E2=80=98master=E2=80=99):

Just got another one:

--8<---------------cut here---------------start------------->8---
checking for struct sigaction.sa_sigaction... yes
checking for volatile sig_atomic_t... yes
checking for sighandler_t... yes
checking for sigprocmask... (cached) yes
checking whether sleep is declared... yes
checking for working sleep... yes
checking for socklen_t... Backtrace:
In gash/shell.scm:
 129: 19 [sh:exec-let () "ac_fn_c_try_compile" "2817"]
In gash/environment.scm:
 215: 18 [save-variables-excursion () ...]
 292: 17 [with-arguments # #<procedure 2210f00 at gash/shell.scm:145:25 ()>]
 389: 16 [call-with-return #<procedure 2210e40 at gash/shell.scm:147:28 ()>]
In srfi/srfi-1.scm:
 619: 15 [for-each #<procedure eval-sh (exp)> ((<sh-begin> # # # ...))]
 619: 14 [for-each #<procedure eval-sh (exp)> (# # # # ...)]
In gash/shell.scm:
 441: 13 [sh:cond # #]
  55: 12 [without-errexit #<procedure 13185e0 at gash/eval.scm:149:6 ()>]
 372: 11 [sh:and #<procedure 1318560 at gash/eval.scm:149:6 ()> ...]
  55: 10 [without-errexit #<procedure 1318560 at gash/eval.scm:149:6 ()>]
 372: 9 [sh:and #<procedure 1318500 at gash/eval.scm:149:6 ()> ...]
  55: 8 [without-errexit #<procedure 1318500 at gash/eval.scm:149:6 ()>]
In srfi/srfi-1.scm:
 616: 7 [for-each #<procedure eval-sh (exp)> (# # # # ...)]
 619: 6 [for-each #<procedure eval-sh (exp)> (# # #)]
In gash/shell.scm:
 245: 5 [#<procedure 1f63030 at gash/shell.scm:239:17 ()>]
 129: 4 [sh:exec-let () "grep" "-v" "^ *+" "conftest.err"]
  92: 3 [exec-utility () ...]
In srfi/srfi-1.scm:
 616: 2 [for-each #<procedure ea9a60 at gash/shell.scm:70:12 (i)> (0 1 2 ..=
.)]
In ice-9/boot-9.scm:
1473: 1 [dup->port #<input: file 20> "r" 7]
In unknown file:
   ?: 0 [fdopen 7 "r"]

ERROR: In procedure fdopen:
ERROR: In procedure scm_fdes_to_port: Bad file descriptor
yes
checking whether symlink handles trailing slash correctly... yes
checking whether <sys/ioctl.h> declares ioctl... yes
checking for unsetenv... yes
checking for unsetenv() return type... int
--8<---------------cut here---------------end--------------->8---

That one likely doesn=E2=80=99t change the build outcome since it still
determines that =E2=80=98socklen_t=E2=80=99 is defined, but it sounds a bit=
 like a dice
roll.

Ludo=E2=80=99.




Information forwarded to bug-guix@HIDDEN:
bug#75658; Package guix. Full text available.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 18 Jan 2025 22:08:26 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Sat Jan 18 17:08:26 2025
Received: from localhost ([127.0.0.1]:44014 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1tZGzS-0002dH-4X
	for submit <at> debbugs.gnu.org; Sat, 18 Jan 2025 17:08:26 -0500
Received: from lists.gnu.org ([2001:470:142::17]:42860)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <ludovic.courtes@HIDDEN>)
 id 1tZGzP-0002cz-Ke
 for submit <at> debbugs.gnu.org; Sat, 18 Jan 2025 17:08:24 -0500
Received: from eggs.gnu.org ([2001:470:142:3::10])
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <ludovic.courtes@HIDDEN>)
 id 1tZGzJ-0004QZ-Jy
 for bug-guix@HIDDEN; Sat, 18 Jan 2025 17:08:17 -0500
Received: from mail2-relais-roc.national.inria.fr ([192.134.164.83])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <ludovic.courtes@HIDDEN>)
 id 1tZGzG-0007Cu-TX
 for bug-guix@HIDDEN; Sat, 18 Jan 2025 17:08:17 -0500
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=inria.fr; s=dc;
 h=from:to:subject:date:message-id:mime-version:
 content-transfer-encoding;
 bh=do7/7X6RkY54a2ip0zLVejvNzO6YPAN3yojljKXPrHo=;
 b=qx4WOiFSZZV5vcCZN+KFOzQrKaiXxdPcNheoGK34Ude73lMPGVqIhn6E
 EolOC4HpmQtwj1lzXZiIBu6dv9jZWBDEQKLwD9vEMIj4kXwGMnzeWnzEn
 AiMrDZmmqZBs+sZ4Ts2uPmgmn5mt60yk4k6RiQjFvzZDwe9f1GO3Je4od A=;
Authentication-Results: mail2-relais-roc.national.inria.fr;
 dkim=none (message not signed) header.i=none;
 spf=SoftFail smtp.mailfrom=ludovic.courtes@HIDDEN;
 dmarc=fail (p=none dis=none) d=inria.fr
X-IronPort-AV: E=Sophos;i="6.13,216,1732575600"; d="scan'208";a="203824290"
Received: from 91-160-117-201.subs.proxad.net (HELO ribbon) ([91.160.117.201])
 by mail2-relais-roc.national.inria.fr with
 ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 18 Jan 2025 23:08:09 +0100
From: =?utf-8?Q?Ludovic_Court=C3=A8s?= <ludovic.courtes@HIDDEN>
To: bug-guix@HIDDEN
Subject: Non-deterministic Gash error in =?utf-8?Q?=E2=80=98gcc-mesboot-4?=
 =?utf-8?Q?=2E9=2E4=E2=80=99?=
X-Debbugs-Cc: Janneke Nieuwenhuizen <janneke@HIDDEN>, Timothy Sample
 <samplet@HIDDEN>
X-URL: http://www.fdn.fr/~lcourtes/
X-Revolutionary-Date: Nonidi 29 =?utf-8?Q?Niv=C3=B4se?= an 233 de la
 =?utf-8?Q?R=C3=A9volution=2C?= jour du Mercure
X-PGP-Key-ID: 0x090B11993D9AEBB5
X-PGP-Key: http://www.fdn.fr/~lcourtes/ludovic.asc
X-PGP-Fingerprint: 3CE4 6455 8A84 FDC6 9DB4  0CFB 090B 1199 3D9A EBB5
X-OS: x86_64-pc-linux-gnu
Date: Sat, 18 Jan 2025 23:08:09 +0100
Message-ID: <87msfnsrli.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13)
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
Received-SPF: pass client-ip=192.134.164.83;
 envelope-from=ludovic.courtes@HIDDEN;
 helo=mail2-relais-roc.national.inria.fr
X-Spam_score_int: -43
X-Spam_score: -4.4
X-Spam_bar: ----
X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001,
 RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: submit
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Hello,

I stumbled upon this interesting non-deterministic failure while
building =E2=80=98gcc-mesboot-4.9.4.drv=E2=80=99 on current =E2=80=98core-p=
ackages-team=E2=80=99 (which
is unchanged compared to =E2=80=98master=E2=80=99):

--8<---------------cut here---------------start------------->8---
source directory: "/tmp/guix-build-gcc-mesboot-4.9.4.drv-0/gcc-4.9.4" (rela=
tive from build: ".")
build directory: "/tmp/guix-build-gcc-mesboot-4.9.4.drv-0/gcc-4.9.4"
configure flags: ("CONFIG_SHELL=3D/gnu/store/bhmkf29xki04mmydpm0axpbh35md4v=
fb-gash-boot-0.3.0/bin/bash" "SHELL=3D/gnu/store/bhmkf29xki04mmydpm0axpbh35=
md4vfb-gash-boot-0.3.0/bin/bash" "--prefix=3D/gnu/store/mgbd56zvid129vkk8l9=
zir7pf46r5038-gcc-mesboot-4.9.4" "--enable-fast-install" "--build=3Dx86_64-=
unknown-linux-gnu" "--prefix=3D/gnu/store/mgbd56zvid129vkk8l9zir7pf46r5038-=
gcc-mesboot-4.9.4" "--build=3Di686-unknown-linux-gnu" "--host=3Di686-unknow=
n-linux-gnu" "--with-host-libstdcxx=3D-lsupc++" "--with-native-system-heade=
r-dir=3D/gnu/store/qxp7icgwbn1hqqwvkan7aljgzfn439zh-glibc-mesboot-2.16.0/in=
clude" "--with-build-sysroot=3D/gnu/store/qxp7icgwbn1hqqwvkan7aljgzfn439zh-=
glibc-mesboot-2.16.0/include" "--disable-bootstrap" "--disable-decimal-floa=
t" "--disable-libatomic" "--disable-libcilkrts" "--disable-libgomp" "--disa=
ble-libitm" "--disable-libmudflap" "--disable-libquadmath" "--disable-libsa=
nitizer" "--disable-libssp" "--disable-libvtv" "--disable-lto" "--disable-l=
to-plugin" "--disable-multilib" "--disable-plugin" "--disable-threads" "--e=
nable-languages=3Dc,c++" "--enable-static" "--enable-shared" "--enable-thre=
ads=3Dsingle" "--disable-libstdcxx-pch" "--disable-build-with-cxx")
Backtrace:
In gash/eval.scm:
 221: 19 [eval-sh (<sh-set!> ("ac_useropt" (<sh-cmd-sub> #)))]
In srfi/srfi-1.scm:
 642: 18 [for-each #<procedure 1502320 at gash/eval.scm:221:17 (name word)>=
 # #]
In gash/eval.scm:
 222: 17 [#<procedure 1502320 at gash/eval.scm:221:17 (name word)> "ac_user=
opt" #]
 131: 16 [eval-word (<sh-cmd-sub> (<sh-pipeline> # #)) #:output string ...]
 121: 15 [expand-word (<sh-cmd-sub> (<sh-pipeline> # #)) #:output string ..=
.]
In gash/shell.scm:
 289: 14 [sh:substitute-command #<procedure 15022a0 at gash/eval.scm:129:35=
 ()>]
 270: 13 [%subshell #<procedure v ()>]
In ice-9/boot-9.scm:
 157: 12 [catch quit #<procedure v ()> ...]
In ice-9/r4rs.scm:
 176: 11 [with-output-to-port #<variable 13a02e0 value: #<output: file 39>>=
 ...]
In srfi/srfi-1.scm:
 619: 10 [for-each #<procedure eval-sh (exp)> ((<sh-pipeline> # #))]
In gash/shell.scm:
 344: 9 [sh:pipeline #<procedure 1506f40 at gash/eval.scm:149:6 ()> ...]
 310: 8 [plumb #<input: #{read pipe}# 36> #f ...]
 270: 7 [%subshell #<procedure thunk* ()>]
In ice-9/boot-9.scm:
 157: 6 [catch quit #<procedure thunk* ()> ...]
In gash/shell.scm:
 316: 5 [thunk*]
 129: 4 [sh:exec-let () "sed" "s/[-+.]/_/g"]
  92: 3 [exec-utility () ...]
In srfi/srfi-1.scm:
 616: 2 [for-each #<procedure ec3b20 at gash/shell.scm:70:12 (i)> (0 1 2 ..=
.)]
In ice-9/boot-9.scm:
1473: 1 [dup->port #<input: file 38> "r" 7]
In unknown file:
   ?: 0 [fdopen 7 "r"]

ERROR: In procedure fdopen:
ERROR: In procedure scm_fdes_to_port: Bad file descriptor
Backtrace:
In gash/eval.scm:
 221: 19 [eval-sh (<sh-set!> ("ac_useropt" (<sh-cmd-sub> #)))]
In srfi/srfi-1.scm:
 642: 18 [for-each #<procedure 1502320 at gash/eval.scm:221:17 (name word)>=
 # #]
In gash/eval.scm:
 222: 17 [#<procedure 1502320 at gash/eval.scm:221:17 (name word)> "ac_user=
opt" #]
 131: 16 [eval-word (<sh-cmd-sub> (<sh-pipeline> # #)) #:output string ...]
 121: 15 [expand-word (<sh-cmd-sub> (<sh-pipeline> # #)) #:output string ..=
.]
In gash/shell.scm:
 289: 14 [sh:substitute-command #<procedure 15022a0 at gash/eval.scm:129:35=
 ()>]
 270: 13 [%subshell #<procedure v ()>]
In ice-9/boot-9.scm:
 157: 12 [catch quit #<procedure v ()> ...]
In ice-9/r4rs.scm:
 176: 11 [with-output-to-port #<variable 13a02e0 value: #<output: file 39>>=
 ...]
In srfi/srfi-1.scm:
 619: 10 [for-each #<procedure eval-sh (exp)> ((<sh-pipeline> # #))]
In gash/shell.scm:
 347: 9 [sh:pipeline #<procedure 1506f40 at gash/eval.scm:149:6 ()> ...]
 310: 8 [plumb #f #<output: #{write pipe}# 38> ...]
 270: 7 [%subshell #<procedure thunk* ()>]
In ice-9/boot-9.scm:
 157: 6 [catch quit #<procedure thunk* ()> ...]
In gash/shell.scm:
 316: 5 [thunk*]
 129: 4 [sh:exec-let () "printf" "%s\\n" "libsanitizer"]
  92: 3 [exec-utility () ...]
In srfi/srfi-1.scm:
 616: 2 [for-each #<procedure ec3b20 at gash/shell.scm:70:12 (i)> (0 1 2 ..=
.)]
In ice-9/boot-9.scm:
1473: 1 [dup->port #<input: file 36> "r" 7]
In unknown file:
   ?: 0 [fdopen 7 "r"]

ERROR: In procedure fdopen:
ERROR: In procedure scm_fdes_to_port: Bad file descriptor
checking build system type... i686-unknown-linux-gnu
checking host system type... i686-unknown-linux-gnu
checking target system type... i686-unknown-linux-gnu
checking for a BSD-compatible install... ./install-sh -c
checking whether ln works... yes
checking whether ln -s works... yes
checking for a sed that does not truncate output... /gnu/store/i61mvrw30k8n=
g8hxym8s180nydnsbji6-gash-utils-boot-0.2.0/bin/sed
checking for gawk... gawk
checking for libsanitizer support... yes
--8<---------------cut here---------------end--------------->8---

What happens is that Gash crashes in the middle of a substitution on
$ac_useropt.  As a result, =E2=80=98--disable-libsanitizer=E2=80=99 (and ot=
her options,
it seems) are discarded, hence the =E2=80=9Clibsanitizer support... yes=E2=
=80=9D line.
Hours later, build fails while trying to build libsanitizer.

Any idea what could cause EBADF?

Thanks,
Ludo=E2=80=99.




Acknowledgement sent to Ludovic Courtès <ludovic.courtes@HIDDEN>:
New bug report received and forwarded. Copy sent to janneke@HIDDEN, samplet@HIDDEN, bug-guix@HIDDEN. Full text available.
Report forwarded to janneke@HIDDEN, samplet@HIDDEN, bug-guix@HIDDEN:
bug#75658; Package guix. Full text available.
Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.
Last modified: Wed, 2 Apr 2025 14:45:02 UTC

GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997 nCipher Corporation Ltd, 1994-97 Ian Jackson.