From: Maksim Rayskiy <[email protected]>

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 <[email protected]>
---
 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 e509216..2195248 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))) {
-- 
1.7.4.1


_______________________________________________
uClibc mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/uclibc

Reply via email to