aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Maksim Rayskiy <mrayskiy@broadcom.com>2011-06-16 18:14:01 -0700
committerGravatar Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>2011-06-29 19:26:21 +0200
commit9152c4d67c763fde5712e2d181d92c0d7e1e2ab9 (patch)
tree2146c0243b6bb7c8545c88ee5d66f2199653ed01
parentb07419ed6503758203004d2362e9a6f3138f0bd3 (diff)
downloaduClibc-9152c4d67c763fde5712e2d181d92c0d7e1e2ab9.tar.gz
uClibc-9152c4d67c763fde5712e2d181d92c0d7e1e2ab9.tar.bz2
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.c5
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))) {