From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dedi548.your-server.de (dedi548.your-server.de [85.10.215.148]) by sourceware.org (Postfix) with ESMTPS id 5F067395C068 for ; Thu, 19 May 2022 17:08:37 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 5F067395C068 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=embedded-brains.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=embedded-brains.de Received: from sslproxy01.your-server.de ([78.46.139.224]) by dedi548.your-server.de with esmtpsa (TLS1.3) tls TLS_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1nrjdc-0002IZ-7u for newlib@sourceware.org; Thu, 19 May 2022 19:08:36 +0200 Received: from [82.100.198.138] (helo=mail.embedded-brains.de) by sslproxy01.your-server.de with esmtpsa (TLSv1.3:TLS_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nrjdc-000IFX-5G for newlib@sourceware.org; Thu, 19 May 2022 19:08:36 +0200 Received: from localhost (localhost [127.0.0.1]) by mail.embedded-brains.de (Postfix) with ESMTP id CAC47480157 for ; Thu, 19 May 2022 19:08:35 +0200 (CEST) Received: from mail.embedded-brains.de ([127.0.0.1]) by localhost (zimbra.eb.localhost [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id hA12fGt9jDTG for ; Thu, 19 May 2022 19:08:35 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by mail.embedded-brains.de (Postfix) with ESMTP id 65E37480162 for ; Thu, 19 May 2022 19:08:35 +0200 (CEST) X-Virus-Scanned: amavisd-new at zimbra.eb.localhost Received: from mail.embedded-brains.de ([127.0.0.1]) by localhost (zimbra.eb.localhost [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id Umn-JL6AQYjZ for ; Thu, 19 May 2022 19:08:35 +0200 (CEST) Received: from [10.10.171.14] (unknown [10.10.171.14]) by mail.embedded-brains.de (Postfix) with ESMTPSA id 15B11480157 for ; Thu, 19 May 2022 19:08:35 +0200 (CEST) Message-ID: Date: Thu, 19 May 2022 19:08:33 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.9.0 Subject: Re: [PATCH] Fix __fp_lock_all() and __fp_unlock_all() Content-Language: en-US To: newlib@sourceware.org References: <20220518171307.53663-1-sebastian.huber@embedded-brains.de> From: Sebastian Huber In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable X-Authenticated-Sender: smtp-embedded@poldinet.de X-Virus-Scanned: Clear (ClamAV 0.103.5/26546/Thu May 19 10:03:47 2022) X-Spam-Status: No, score=-11.8 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, NICE_REPLY_A, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: newlib@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Newlib mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 19 May 2022 17:08:38 -0000 On 19/05/2022 14:02, Corinna Vinschen wrote: > On May 18 19:13, Sebastian Huber wrote: >> For _REENT_GLOBAL_STDIO_STREAMS, lock/unlock all FILE objects. In the >> repository, this function is only used by Cygwin during process forks.= Since >> Cygwin enabled _REENT_GLOBAL_STDIO_STREAMS recently, without this fix = no FILE >> object at all was locked. >> --- >> newlib/libc/stdio/findfp.c | 4 ++++ >> 1 file changed, 4 insertions(+) >> >> diff --git a/newlib/libc/stdio/findfp.c b/newlib/libc/stdio/findfp.c >> index 6933ff1db..a39082387 100644 >> --- a/newlib/libc/stdio/findfp.c >> +++ b/newlib/libc/stdio/findfp.c >> @@ -333,6 +333,8 @@ __fp_lock_all (void) >> #ifndef _REENT_GLOBAL_STDIO_STREAMS >> ptr =3D _REENT; >> (void) _fwalk_sglue (ptr, __fp_lock, &ptr->__sglue); >> +#else >> + (void) _fwalk_sglue (NULL, __fp_lock, &__sglue); >> #endif >=20 > The resulting __fp_lock_all/__fp_unlock_all functions look a bit weird > to me, codewise. Counter-proposal: >=20 > diff --git a/newlib/libc/stdio/findfp.c b/newlib/libc/stdio/findfp.c > index 118637a18f5b..ebfbf0976de5 100644 > --- a/newlib/libc/stdio/findfp.c > +++ b/newlib/libc/stdio/findfp.c > @@ -329,31 +329,24 @@ __fp_unlock (struct _reent * ptr __unused, FILE *= fp) > return 0; > } > =20 > +#ifdef _REENT_GLOBAL_STDIO_STREAMS > +# define _PTR NULL > +# define _GLUE __sglue > +#else > +# define _PTR _REENT > +# define _GLUE _PTR->__sglue > +#endif > + > void > __fp_lock_all (void) > { > -#ifndef _REENT_GLOBAL_STDIO_STREAMS > - struct _reent *ptr; > -#endif > - > - __sfp_lock_acquire (); > - > -#ifndef _REENT_GLOBAL_STDIO_STREAMS > - ptr =3D _REENT; > - (void) _fwalk_sglue (ptr, __fp_lock, &ptr->__sglue); > -#endif > + _fwalk_sglue (_PTR, __fp_lock, &_GLUE); > } > =20 > void > __fp_unlock_all (void) > { > -#ifndef _REENT_GLOBAL_STDIO_STREAMS > - struct _reent *ptr; > - > - ptr =3D _REENT; > - (void) _fwalk_sglue (ptr, __fp_unlock, &ptr->__sglue); > -#endif > - > + _fwalk_sglue (_PTR, __fp_unlock, &_GLUE); > __sfp_lock_release (); > } > #endif >=20 > What do you think? This patch was a preparation for this proposal: https://sourceware.org/pipermail/newlib/2022/019735.html It is a behaviour change for the default Newlib configuration, however,=20 from my point of view it is more or less a bug fix. --=20 embedded brains GmbH Herr Sebastian HUBER Dornierstr. 4 82178 Puchheim Germany email: sebastian.huber@embedded-brains.de phone: +49-89-18 94 741 - 16 fax: +49-89-18 94 741 - 08 Registergericht: Amtsgericht M=C3=BCnchen Registernummer: HRB 157899 Vertretungsberechtigte Gesch=C3=A4ftsf=C3=BChrer: Peter Rasmussen, Thomas= D=C3=B6rfler Unsere Datenschutzerkl=C3=A4rung finden Sie hier: https://embedded-brains.de/datenschutzerklaerung/