[PATCH]: Thread safe stdio with cygwin

Jeff Johnston jjohnstn@redhat.com
Fri Jan 16 19:30:00 GMT 2004


Patch checked in.  Thanks.

-- Jeff J.

Thomas Pfaff wrote:

> Jeff,
>
> i think that you are right, the memset stuff can be avoided when 
> lock_init_recursive does this.
>
> Attached is a patch that will
>
> 1. Remove the unnecessary memset stuff in __sfp and __sbprintf.
> 2. Add calls to __lock_init_recursive and __lock_close_recursive in 
> __sbprintf.
>
> Thomas
>
> 2004-01-16  Thomas Pfaff  <tpfaff@gmx.net>
>
>     * libc/stdio/findfp.c (__sfp): Remove unnecessary memset.
>     * libc/stdio/vfprintf.c (__sbprintf): Ditto.
>     Add calls to __lock_init_recursive and __lock_close_recursive
>     instead.
>
> Jeff Johnston wrote:
>
>> I should have added that there is no reason not to check in your 
>> patch which I have just done.
>> I can add the initialization/closing in __sbprintf().
>>
>> -- Jeff J.
>>
>> Jeff Johnston wrote:
>>
>>> Thomas Pfaff wrote:
>>>
>>>> Jeff,
>>>>
>>>> memset makes only sure that _lock does not contain random data 
>>>> before __lock_init_recursive. __lock_init_recursive is called later 
>>>> when the file is really opened.
>>>
>>>
>>>
>>>
>>> I assumed you were worried about something accessing the file 
>>> pointer before fopen/freopen returned the file pointer so it would 
>>> then make sense just to initialize it earlier.  Otherwise, the 
>>> __lock_init_recursive should initialize the lock without need for 
>>> pre-initialization.
>>>
>>>>
>>>> __sbprintf is a special case because it generates a fake FILE 
>>>> pointer and its associated buf on the stack, therefore there is no 
>>>> need to lock it fo thread safety.
>>>
>>>
>>>
>>>
>>> There may be no need to lock, but the VFPRINTF code attempts a lock 
>>> and unlock anyway.  It then makes sense to ensure that the lock is 
>>> validly initialized/closed for any platform's lock implementation.
>>> -- Jeff J.
>>>
>>>> Thomas
>>>>
>>>> Jeff Johnston wrote:
>>>>
>>>>> Thomas,
>>>>>
>>>>>  You should be using __lock_init_recursive to initialize the locks 
>>>>> rather than zeroing them out.
>>>>> The code in __sbprintf should probably be closing the lock after 
>>>>> the call to VFPRINTF as well.
>>>>>
>>>>> -- Jeff J.
>>>>>
>>>>> Thomas Pfaff wrote:
>>>>>
>>>>>> This patch adds support for thread safe stdio for Cygwin.
>>>>>>
>>>>>> Cygwin uses dynamic mutexes for locking, therefore it is
>>>>>> necessary to:
>>>>>>
>>>>>> 1. Initialize FILE pointers _lock properly.
>>>>>> 2. Destroy the lock when it is no longer needed.
>>>>>>
>>>>>> Regards,
>>>>>>
>>>>>> Thomas
>>>>>>
>>>>>> 2004-01-12  Thomas Pfaff  <tpfaff@gmx.net>
>>>>>>
>>>>>>     * libc/stdio/fclose.c: Include sys/lock.h.
>>>>>>     (fclose): Destroy lock when file is closed.
>>>>>>     * libc/stdio/findfp.c (__sfp): Initialize file pointers _lock
>>>>>>     member.
>>>>>>     * libc/stdio/freopen.c: Include sys/lock.h.
>>>>>>     (_freopen_r): Destroy lock when file is closed.
>>>>>>     * libc/stdio/vfprintf.c (__sbprintf): Initialize file pointers
>>>>>>     _lock member.
>>>>>>
>>>>>>  
>>>>>>
>>>>>
>>>>
>>>
>



More information about the Newlib mailing list