Module: wine Branch: master Commit: 0c4cb6ce5d411a60ec11e52d6481c4148344d067 URL: http://source.winehq.org/git/wine.git/?a=commit;h=0c4cb6ce5d411a60ec11e52d64... Author: Piotr Caban <piotr(a)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++) {