[PATCH] _fwalk walks through thread local FILE pointer
Joel Sherrill <joel@OARcorp.com>
Fri Jan 30 20:12:00 GMT 2004
My understanding of the reentrancy code in newlib must have gotten
totally out of sync with reality. Is there any documentation
I can read to catch up and get educated again?
Jeff Johnston wrote:
> I think that the stdin/stdout/stderr for the thread should also be
> walked in addition to the global list for now. I don't think that
> should cause problems with Cygwin but if so, we can add an #ifdef check.
> -- Jeff J.
> Thomas Pfaff wrote:
>> Take a look at findfp.c and you will see that all FILE pointers are
>> hold in _GLOBAL_REENT, therefore _fwalk simply does not walk through
>> the real FILE pointer list, but through the thread lokal ones which
>> will contain only stdin, stdout and stderr.
>> The obsolete REENT ptr can be removed but thats Jeffs decision.
>> You can search the list why _GLOBAL_REENT was introduced some time
>> ago. The former implementation where every thread has its own pointer
>> list was incorrect, FILE pointers are process global objects.
>> There is still a problem with stdin, stdout and stderr because every
>> thread has its own buffers for these files. Cygwin has a workaround
>> for this problem, it maps the thread lokal stdin, stdout and stderr to
>> _GLOBAL_REENT aka _impure_ptr FILE pointers. I think that this will a
>> working solution for other platforms as well.
>> Joel Sherrill wrote:
>>> This isn't right. You are passed a REENT pointer and cannot
>>> simply ignore it.
>>> This will break any code that depends upon the existing
>>> behavior. In RTEMS, we use _fwalk as it exists to
>>> implement sync() and walk each thread's open files.
>>> It is also used as part of the per-thread cleanup
>>> If you want to have NULL ptr argument imply the global
>>> reent, great but don't break it.
Joel Sherrill, Ph.D. Director of Research & Development
joel@OARcorp.com On-Line Applications Research
Ask me about RTEMS: a free RTOS Huntsville AL 35805
Support Available (256) 722-9985
More information about the Newlib