diff options
author | Maksim Rayskiy <mrayskiy@broadcom.com> | 2011-06-16 18:14:01 -0700 |
---|---|---|
committer | Carmelo Amoroso <carmelo.amoroso@st.com> | 2011-06-29 11:34:38 +0200 |
commit | 18bf00f3123707f9d1d7a2876121dea1c2c39a89 (patch) | |
tree | 398fc70854b76e9e2c932fb23c0272a7e968c339 | |
parent | c61993f7e0ad3a9014a4b73823faf1ba914f48a0 (diff) |
libc: add missing lock initialization in vswprintf
Unlike vsnprintf, vswprintf does not properly initialize locking
elements of FILE structure, which in some unfortunate cases can result
in lockups in _vfwprintf_internal.
Interesting, the initialization code was removed in
2a915734a32c5aec9a6a76c13bcb074d30e64171 at the same time as it was added
to vsnprintf.
Signed-off-by: Maksim Rayskiy <mrayskiy@broadcom.com>
Signed-off-by: Carmelo Amoroso <carmelo.amoroso@st.com>
-rw-r--r-- | libc/stdio/vswprintf.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/libc/stdio/vswprintf.c b/libc/stdio/vswprintf.c index e509216e9..219524830 100644 --- a/libc/stdio/vswprintf.c +++ b/libc/stdio/vswprintf.c @@ -39,6 +39,11 @@ int vswprintf(wchar_t *__restrict buf, size_t size, __INIT_MBSTATE(&(f.__state)); #endif /* __STDIO_MBSTATE */ +#ifdef __UCLIBC_HAS_THREADS__ + f.__user_locking = 1; /* Set user locking. */ + STDIO_INIT_MUTEX(f.__lock); +#endif /* __UCLIBC_HAS_THREADS__ */ + f.__nextopen = NULL; if (size > ((SIZE_MAX - (size_t) buf)/sizeof(wchar_t))) { |