[PATCH v3 3/5] Introduce _REENT_GLOBAL_STDIO_STREAMS

Sebastian Huber sebastian.huber@embedded-brains.de
Fri Jun 30 08:58:00 GMT 2017



----- Am 30. Jun 2017 um 10:13 schrieb Corinna Vinschen vinschen@redhat.com:

> On Jun 30 07:43, Sebastian Huber wrote:
>> On 29/06/17 20:31, Corinna Vinschen wrote:
>> 
>> > And, JFYI, Cygwin will start to use it too after the next release:)
>> 
>> There are some new problems with this change. We have no reference counting
>> in the FILE objects, so a freopen(..., stdin), closes the global stdin FILE
>> object (__sf[0]), etc. What works is a stdin = fopen(). I guess this could
>> break existing applications.
> 
> Erm... isn't that expected behaviour?  stdin/stdout/stderr are global
> objects, after all.  They were never thread-local per POSIX.

The stdin/stdout/stderr pointers are still thread-local with this option. Only the FILE objects itself are now global. If you do a stdin = fopen() you get a completely thread-local stdin. I have absolutely no idea why this stuff is thread-local in Newlib by default.



More information about the Newlib mailing list