msvcrt: Use fd critical section in _close.

This commit is contained in:
Piotr Caban 2014-11-11 15:58:18 +01:00 committed by Alexandre Julliard
parent 4508e665c0
commit afc6962a24
1 changed files with 5 additions and 6 deletions

View File

@ -988,24 +988,23 @@ int CDECL MSVCRT__fflush_nolock(MSVCRT_FILE* file)
*/ */
int CDECL MSVCRT__close(int fd) int CDECL MSVCRT__close(int fd)
{ {
HANDLE hand; ioinfo *info = get_ioinfo(fd);
int ret; int ret;
LOCK_FILES(); LOCK_FILES();
hand = msvcrt_fdtoh(fd); TRACE(":fd (%d) handle (%p)\n", fd, info->handle);
TRACE(":fd (%d) handle (%p)\n",fd,hand); if (!(info->wxflag & WX_OPEN)) {
if (!msvcrt_is_valid_fd(fd)) {
ret = -1; ret = -1;
} else { } else {
ret = CloseHandle(info->handle) ? 0 : -1;
msvcrt_free_fd(fd); msvcrt_free_fd(fd);
ret = CloseHandle(hand) ? 0 : -1;
if (ret) { if (ret) {
WARN(":failed-last error (%d)\n",GetLastError()); WARN(":failed-last error (%d)\n",GetLastError());
msvcrt_set_errno(GetLastError()); msvcrt_set_errno(GetLastError());
} }
} }
UNLOCK_FILES(); UNLOCK_FILES();
TRACE(":ok\n"); release_ioinfo(info);
return ret; return ret;
} }