diff options
author | Maksim Rayskiy <mrayskiy@broadcom.com> | 2011-06-16 18:14:01 -0700 |
---|---|---|
committer | Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> | 2011-06-29 19:26:21 +0200 |
commit | 9152c4d67c763fde5712e2d181d92c0d7e1e2ab9 (patch) | |
tree | 2146c0243b6bb7c8545c88ee5d66f2199653ed01 | |
parent | b07419ed6503758203004d2362e9a6f3138f0bd3 (diff) | |
download | uClibc-alpine-9152c4d67c763fde5712e2d181d92c0d7e1e2ab9.tar.bz2 uClibc-alpine-9152c4d67c763fde5712e2d181d92c0d7e1e2ab9.tar.xz |
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>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.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))) { |