[git commit 0.9.32] libc: add missing lock initialization in vswprintf
Carmelo Amoroso
carmelo.amoroso at st.com
Wed Jun 29 09:34:38 UTC 2011
commit: http://git.uclibc.org/uClibc/commit/?id=9152c4d67c763fde5712e2d181d92c0d7e1e2ab9
branch: http://git.uclibc.org/uClibc/commit/?id=refs/heads/0.9.32
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 at broadcom.com>
Signed-off-by: Carmelo Amoroso <carmelo.amoroso at st.com>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop at gmail.com>
---
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.3.4
More information about the uClibc-cvs
mailing list