[PATCH]: Thread safe FILE allocation [WAS: Re: [RFC]: Thread safety in __sfp and atexit]
Jeff Johnston
jjohnstn@redhat.com
Fri Jan 23 04:29:00 GMT 2004
Thomas Pfaff wrote:
> Jeff Johnston wrote:
>
>> Thomas Pfaff wrote:
>>
>>> The list operations in __sfp and atexit are not thread safe AFAICS.
>>>
>>> This could be avoided by using a mutex or atomic instructions when a
>>> FILE pointer is acquired or an atexit function is added.
>>>
>>> The problem hereby is that such a mutex should be created on newlib
>>> initialization (_REENT_INIT on the _impure_ptr for example), but
>>> there might be better locations.
>>>
>>> Doing list insert with atomic instructions on the other hand is easy
>>> on i86 (i486 and above) but might be a problem on other platfomrs.
>>>
>>> Comments are welcome.
>>>
>>> Thomas
>>
>>
>>
>> You can't assume atomic instructions exist for all platforms. I
>> think something akin to the ENV_LOCK. MALLOC_LOCK methods used by the
>> getenv and malloc family routines would be appropriate.
>> -- Jeff J.
>
>
> Attached is what i think would be appropriate.
> It protects the FILE pointer list by using __LOCK_INIT, __lock_acquire
> and __lock_release.
>
> Thomas
>
> 2004-01-22 Thomas Pfaff <tpfaff@gmx.net>
>
> * libc/stdio/findfp.c (__sfp): Protect global FILE pointer list
> by a lock when newlib is multithreaded.
Thanks. Patch has been committed.
-- Jeff J.
More information about the Newlib
mailing list