Piotr Caban : msvcrt: Make printf functions thread safe.
Alexandre Julliard
julliard at winehq.org
Thu May 19 13:32:12 CDT 2011
Module: wine
Branch: master
Commit: c5894bacf5cc55c1e25bb9905535d5ef0dc2ab14
URL: http://source.winehq.org/git/wine.git/?a=commit;h=c5894bacf5cc55c1e25bb9905535d5ef0dc2ab14
Author: Piotr Caban <piotr at codeweavers.com>
Date: Thu May 19 15:31:51 2011 +0200
msvcrt: Make printf functions thread safe.
---
dlls/msvcrt/file.c | 32 ++++++++++++++++++++++++++++----
1 files changed, 28 insertions(+), 4 deletions(-)
diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c
index ee95c28..b9c7e90 100644
--- a/dlls/msvcrt/file.c
+++ b/dlls/msvcrt/file.c
@@ -3563,7 +3563,13 @@ static int puts_clbk_file_w(void *file, int len, const MSVCRT_wchar_t *str)
*/
int CDECL MSVCRT_vfprintf(MSVCRT_FILE* file, const char *format, __ms_va_list valist)
{
- return pf_printf_a(puts_clbk_file_a, file, format, NULL, FALSE, FALSE, arg_clbk_valist, NULL, &valist);
+ int ret;
+
+ MSVCRT__lock_file(file);
+ ret = pf_printf_a(puts_clbk_file_a, file, format, NULL, FALSE, FALSE, arg_clbk_valist, NULL, &valist);
+ MSVCRT__unlock_file(file);
+
+ return ret;
}
/*********************************************************************
@@ -3571,12 +3577,18 @@ int CDECL MSVCRT_vfprintf(MSVCRT_FILE* file, const char *format, __ms_va_list va
*/
int CDECL MSVCRT_vfprintf_s(MSVCRT_FILE* file, const char *format, __ms_va_list valist)
{
+ int ret;
+
if(!MSVCRT_CHECK_PMT(file != NULL)) {
*MSVCRT__errno() = MSVCRT_EINVAL;
return -1;
}
- return pf_printf_a(puts_clbk_file_a, file, format, NULL, FALSE, TRUE, arg_clbk_valist, NULL, &valist);
+ MSVCRT__lock_file(file);
+ ret = pf_printf_a(puts_clbk_file_a, file, format, NULL, FALSE, TRUE, arg_clbk_valist, NULL, &valist);
+ MSVCRT__unlock_file(file);
+
+ return ret;
}
/*********************************************************************
@@ -3584,7 +3596,13 @@ int CDECL MSVCRT_vfprintf_s(MSVCRT_FILE* file, const char *format, __ms_va_list
*/
int CDECL MSVCRT_vfwprintf(MSVCRT_FILE* file, const MSVCRT_wchar_t *format, __ms_va_list valist)
{
- return pf_printf_w(puts_clbk_file_w, file, format, NULL, FALSE, FALSE, arg_clbk_valist, NULL, &valist);
+ int ret;
+
+ MSVCRT__lock_file(file);
+ ret = pf_printf_w(puts_clbk_file_w, file, format, NULL, FALSE, FALSE, arg_clbk_valist, NULL, &valist);
+ MSVCRT__unlock_file(file);
+
+ return ret;
}
/*********************************************************************
@@ -3592,12 +3610,18 @@ int CDECL MSVCRT_vfwprintf(MSVCRT_FILE* file, const MSVCRT_wchar_t *format, __ms
*/
int CDECL MSVCRT_vfwprintf_s(MSVCRT_FILE* file, const MSVCRT_wchar_t *format, __ms_va_list valist)
{
+ int ret;
+
if(!MSVCRT_CHECK_PMT( file != NULL)) {
*MSVCRT__errno() = MSVCRT_EINVAL;
return -1;
}
- return pf_printf_w(puts_clbk_file_w, file, format, NULL, FALSE, TRUE, arg_clbk_valist, NULL, &valist);
+ MSVCRT__lock_file(file);
+ ret = pf_printf_w(puts_clbk_file_w, file, format, NULL, FALSE, TRUE, arg_clbk_valist, NULL, &valist);
+ MSVCRT__unlock_file(file);
+
+ return ret;
}
/*********************************************************************
More information about the wine-cvs
mailing list