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