Piotr Caban : msvcrt: Make _flsbuf thread safe.
Alexandre Julliard
julliard at winehq.org
Fri May 20 12:44:33 CDT 2011
Module: wine
Branch: master
Commit: c989c4980bf25d9cf87e6c2fa42fb264b56fcd38
URL: http://source.winehq.org/git/wine.git/?a=commit;h=c989c4980bf25d9cf87e6c2fa42fb264b56fcd38
Author: Piotr Caban <piotr at codeweavers.com>
Date: Fri May 20 13:22:00 2011 +0200
msvcrt: Make _flsbuf thread safe.
---
dlls/msvcrt/file.c | 46 ++++++++++++++++++++++++++++------------------
1 files changed, 28 insertions(+), 18 deletions(-)
diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c
index baaabf0..89f1267 100644
--- a/dlls/msvcrt/file.c
+++ b/dlls/msvcrt/file.c
@@ -3025,30 +3025,40 @@ int CDECL MSVCRT_fputc(int c, MSVCRT_FILE* file)
*/
int CDECL MSVCRT__flsbuf(int c, MSVCRT_FILE* file)
{
- /* Flush output buffer */
- if(file->_bufsiz == 0 && !(file->_flag & MSVCRT__IONBF)) {
- msvcrt_alloc_buffer(file);
- }
- if(!(file->_flag & MSVCRT__IOWRT)) {
- if(file->_flag & MSVCRT__IORW) {
- file->_flag |= MSVCRT__IOWRT;
- } else {
- return MSVCRT_EOF;
- }
- }
- if(file->_bufsiz) {
+ MSVCRT__lock_file(file);
+
+ /* Flush output buffer */
+ if(file->_bufsiz == 0 && !(file->_flag & MSVCRT__IONBF)) {
+ msvcrt_alloc_buffer(file);
+ }
+ if(!(file->_flag & MSVCRT__IOWRT)) {
+ if(file->_flag & MSVCRT__IORW) {
+ file->_flag |= MSVCRT__IOWRT;
+ } else {
+ MSVCRT__unlock_file(file);
+ return MSVCRT_EOF;
+ }
+ }
+ if(file->_bufsiz) {
int res=msvcrt_flush_buffer(file);
- return res?res : MSVCRT_fputc(c, file);
- } else {
- unsigned char cc=c;
+ if(!res)
+ res = MSVCRT_fputc(c, file);
+ MSVCRT__unlock_file(file);
+ return res;
+ } else {
+ unsigned char cc=c;
int len;
/* set _cnt to 0 for unbuffered FILEs */
file->_cnt = 0;
- len = MSVCRT__write(file->_file, &cc, 1);
- if (len == 1) return c & 0xff;
+ len = MSVCRT__write(file->_file, &cc, 1);
+ if (len == 1) {
+ MSVCRT__unlock_file(file);
+ return c & 0xff;
+ }
file->_flag |= MSVCRT__IOERR;
+ MSVCRT__unlock_file(file);
return MSVCRT_EOF;
- }
+ }
}
/*********************************************************************
More information about the wine-cvs
mailing list