[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