summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaksim Rayskiy <mrayskiy@broadcom.com>2011-06-16 18:14:01 -0700
committerCarmelo Amoroso <carmelo.amoroso@st.com>2011-06-29 11:34:38 +0200
commit18bf00f3123707f9d1d7a2876121dea1c2c39a89 (patch)
tree398fc70854b76e9e2c932fb23c0272a7e968c339
parentc61993f7e0ad3a9014a4b73823faf1ba914f48a0 (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.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))) {