Просмотр исходного кода

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>
Maksim Rayskiy 13 лет назад
Родитель
Сommit
18bf00f312
1 измененных файлов с 5 добавлено и 0 удалено
  1. 5 0
      libc/stdio/vswprintf.c

+ 5 - 0
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))) {