From: Piotr Caban <piotr@codeweavers.com>
Subject: msvcrt: Don't hold FILE critical section in some functions
Message-Id: <4EC27666.8070500@codeweavers.com>
Date: Tue, 15 Nov 2011 15:25:42 +0100

---
  dlls/msvcrt/file.c |   39 ++++++---------------------------------
  1 files changed, 6 insertions(+), 33 deletions(-)

diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c
index b6af98f..7f3a31a 100644
--- a/dlls/msvcrt/file.c
+++ b/dlls/msvcrt/file.c
@@ -1348,15 +1348,8 @@ __int64 CDECL MSVCRT__filelengthi64(int fd)
  */
 int CDECL MSVCRT__fileno(MSVCRT_FILE* file)
 {
-  int ret;
-
   TRACE(":FILE* (%p) fd (%d)\n",file,file->_file);
-
-  MSVCRT__lock_file(file);
-  ret = file->_file;
-  MSVCRT__unlock_file(file);
-
-  return ret;
+  return file->_file;
 }
 
 /*********************************************************************
@@ -2631,13 +2624,7 @@ int CDECL MSVCRT_fclose(MSVCRT_FILE* file)
  */
 int CDECL MSVCRT_feof(MSVCRT_FILE* file)
 {
-    int ret;
-
-    MSVCRT__lock_file(file);
-    ret = file->_flag & MSVCRT__IOEOF;
-    MSVCRT__unlock_file(file);
-
-    return ret;
+    return file->_flag & MSVCRT__IOEOF;
 }
 
 /*********************************************************************
@@ -2645,13 +2632,7 @@ int CDECL MSVCRT_feof(MSVCRT_FILE* file)
  */
 int CDECL MSVCRT_ferror(MSVCRT_FILE* file)
 {
-    int ret;
-
-    MSVCRT__lock_file(file);
-    ret = file->_flag & MSVCRT__IOERR;
-    MSVCRT__unlock_file(file);
-
-    return ret;
+    return file->_flag & MSVCRT__IOERR;
 }
 
 /*********************************************************************
@@ -3117,25 +3098,20 @@ int CDECL MSVCRT_fputc(int c, MSVCRT_FILE* file)
  */
 int CDECL MSVCRT__flsbuf(int c, MSVCRT_FILE* file)
 {
-    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) {
+        if(file->_flag & MSVCRT__IORW)
             file->_flag |= MSVCRT__IOWRT;
-        } else {
-            MSVCRT__unlock_file(file);
+        else
             return MSVCRT_EOF;
-        }
     }
     if(file->_bufsiz) {
         int res=msvcrt_flush_buffer(file);
         if(!res)
             res = MSVCRT_fputc(c, file);
-        MSVCRT__unlock_file(file);
         return res;
     } else {
         unsigned char cc=c;
@@ -3143,12 +3119,9 @@ int CDECL MSVCRT__flsbuf(int c, MSVCRT_FILE* file)
         /* set _cnt to 0 for unbuffered FILEs */
         file->_cnt = 0;
         len = MSVCRT__write(file->_file, &cc, 1);
-        if (len == 1) {
-            MSVCRT__unlock_file(file);
+        if (len == 1)
             return c & 0xff;
-        }
         file->_flag |= MSVCRT__IOERR;
-        MSVCRT__unlock_file(file);
         return MSVCRT_EOF;
     }
 }