Piotr Caban : msvcrt: Initialize file descriptor critical section.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Nov 11 11:04:46 CST 2014


Module: wine
Branch: master
Commit: 0c4cb6ce5d411a60ec11e52d6481c4148344d067
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=0c4cb6ce5d411a60ec11e52d6481c4148344d067

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Tue Nov 11 15:58:03 2014 +0100

msvcrt: Initialize file descriptor critical section.

---

 dlls/msvcrt/file.c | 14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/dlls/msvcrt/file.c b/dlls/msvcrt/file.c
index 5049605..0c83d15 100644
--- a/dlls/msvcrt/file.c
+++ b/dlls/msvcrt/file.c
@@ -380,7 +380,9 @@ static int msvcrt_set_fd(HANDLE hand, int flag, int fd)
   fdinfo->lookahead[0] = '\n';
   fdinfo->lookahead[1] = '\n';
   fdinfo->lookahead[2] = '\n';
-  fdinfo->exflag = 0;
+  if(!(fdinfo->exflag & EF_CRIT_INIT))
+      InitializeCriticalSection(&fdinfo->crit);
+  fdinfo->exflag = EF_CRIT_INIT;
 
   /* locate next free slot */
   if (fd == MSVCRT_fdstart && fd == MSVCRT_fdend)
@@ -1113,7 +1115,17 @@ void msvcrt_free_io(void)
     MSVCRT__fcloseall();
 
     for(i=0; i<sizeof(MSVCRT___pioinfo)/sizeof(MSVCRT___pioinfo[0]); i++)
+    {
+        if(!MSVCRT___pioinfo[i])
+            continue;
+
+        for(j=0; j<MSVCRT_FD_BLOCK_SIZE; j++)
+        {
+            if(MSVCRT___pioinfo[i][j].exflag & EF_CRIT_INIT)
+                DeleteCriticalSection(&MSVCRT___pioinfo[i][j].crit);
+        }
         MSVCRT_free(MSVCRT___pioinfo[i]);
+    }
 
     for(j=0; j<MSVCRT_stream_idx; j++)
     {




More information about the wine-cvs mailing list