Query regarding thread safety of few libc stdio functions
David Xu
davidxu at freebsd.org
Mon Apr 25 06:33:07 PDT 2005
Mayank Kumar wrote:
>Hi All
>Recently I have been looking at few freebsd libc functions and I found
>That they were not thread safe. Can one of you please confirm.
>
>Following functions in freebsd libc are not thread safe:-
>1: vsnprintf
>2: vsprintf
>3: vsscanf
> theere are many more.
>
>Functions like vfprintf are written as follows:-
>-------------
>int ret;
>
> FLOCKFILE(fp);
> ret = __vfprintf(fp, fmt0, ap);
> FUNLOCKFILE(fp);
> return (ret);
>----------------
>Which ensures that they are thread safe.
>
>Why is the same case not followed for eg with vsnprintf or vsprintf
>Vsnprintf calls directly __vfprintf which is not thread safe. Hence
>How is there thready safey guranteed. Any help on this front
>Would be helpful.
>
>Thanks and regards
>Mayank
>
vsnprintf and vsprintf use a on stack FILE structure,
no other threads can see the structure, it won't be shared
with other threads, so lock is not needed.
Cheers,
David Xu
More information about the freebsd-current
mailing list