mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2025-02-24 06:48:05 +01:00
Close the windows file handle after CreateFileMapping; it isn't needed
I did the changes file; the rest came pseudonymously
This commit is contained in:
parent
75fc4dbbca
commit
ab1b81e838
3 changed files with 12 additions and 8 deletions
4
changes/close_file_handle
Normal file
4
changes/close_file_handle
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
o Minor bugfixes:
|
||||||
|
- Don't hold a windows file handle open for every file mapping;
|
||||||
|
the file mapping handle is sufficient. Fix for bug 5951; bugfix on
|
||||||
|
0.1.2.1-alpha.
|
|
@ -175,24 +175,24 @@ tor_mmap_file(const char *filename)
|
||||||
TCHAR tfilename[MAX_PATH]= {0};
|
TCHAR tfilename[MAX_PATH]= {0};
|
||||||
tor_mmap_t *res = tor_malloc_zero(sizeof(tor_mmap_t));
|
tor_mmap_t *res = tor_malloc_zero(sizeof(tor_mmap_t));
|
||||||
int empty = 0;
|
int empty = 0;
|
||||||
res->file_handle = INVALID_HANDLE_VALUE;
|
HANDLE file_handle = INVALID_HANDLE_VALUE;
|
||||||
res->mmap_handle = NULL;
|
res->mmap_handle = NULL;
|
||||||
#ifdef UNICODE
|
#ifdef UNICODE
|
||||||
mbstowcs(tfilename,filename,MAX_PATH);
|
mbstowcs(tfilename,filename,MAX_PATH);
|
||||||
#else
|
#else
|
||||||
strlcpy(tfilename,filename,MAX_PATH);
|
strlcpy(tfilename,filename,MAX_PATH);
|
||||||
#endif
|
#endif
|
||||||
res->file_handle = CreateFile(tfilename,
|
file_handle = CreateFile(tfilename,
|
||||||
GENERIC_READ, FILE_SHARE_READ,
|
GENERIC_READ, FILE_SHARE_READ,
|
||||||
NULL,
|
NULL,
|
||||||
OPEN_EXISTING,
|
OPEN_EXISTING,
|
||||||
FILE_ATTRIBUTE_NORMAL,
|
FILE_ATTRIBUTE_NORMAL,
|
||||||
0);
|
0);
|
||||||
|
|
||||||
if (res->file_handle == INVALID_HANDLE_VALUE)
|
if (file_handle == INVALID_HANDLE_VALUE)
|
||||||
goto win_err;
|
goto win_err;
|
||||||
|
|
||||||
res->size = GetFileSize(res->file_handle, NULL);
|
res->size = GetFileSize(file_handle, NULL);
|
||||||
|
|
||||||
if (res->size == 0) {
|
if (res->size == 0) {
|
||||||
log_info(LD_FS,"File \"%s\" is empty. Ignoring.",filename);
|
log_info(LD_FS,"File \"%s\" is empty. Ignoring.",filename);
|
||||||
|
@ -200,7 +200,7 @@ tor_mmap_file(const char *filename)
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
res->mmap_handle = CreateFileMapping(res->file_handle,
|
res->mmap_handle = CreateFileMapping(file_handle,
|
||||||
NULL,
|
NULL,
|
||||||
PAGE_READONLY,
|
PAGE_READONLY,
|
||||||
#if SIZEOF_SIZE_T > 4
|
#if SIZEOF_SIZE_T > 4
|
||||||
|
@ -218,6 +218,7 @@ tor_mmap_file(const char *filename)
|
||||||
if (!res->data)
|
if (!res->data)
|
||||||
goto win_err;
|
goto win_err;
|
||||||
|
|
||||||
|
CloseHandle(file_handle);
|
||||||
return res;
|
return res;
|
||||||
win_err: {
|
win_err: {
|
||||||
DWORD e = GetLastError();
|
DWORD e = GetLastError();
|
||||||
|
@ -234,6 +235,8 @@ tor_mmap_file(const char *filename)
|
||||||
err:
|
err:
|
||||||
if (empty)
|
if (empty)
|
||||||
errno = ERANGE;
|
errno = ERANGE;
|
||||||
|
if (file_handle != INVALID_HANDLE_VALUE)
|
||||||
|
CloseHandle(file_handle);
|
||||||
tor_munmap_file(res);
|
tor_munmap_file(res);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -247,8 +250,6 @@ tor_munmap_file(tor_mmap_t *handle)
|
||||||
|
|
||||||
if (handle->mmap_handle != NULL)
|
if (handle->mmap_handle != NULL)
|
||||||
CloseHandle(handle->mmap_handle);
|
CloseHandle(handle->mmap_handle);
|
||||||
if (handle->file_handle != INVALID_HANDLE_VALUE)
|
|
||||||
CloseHandle(handle->file_handle);
|
|
||||||
tor_free(handle);
|
tor_free(handle);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -249,7 +249,6 @@ typedef struct tor_mmap_t {
|
||||||
size_t mapping_size; /**< Size of the actual mapping. (This is this file
|
size_t mapping_size; /**< Size of the actual mapping. (This is this file
|
||||||
* size, rounded up to the nearest page.) */
|
* size, rounded up to the nearest page.) */
|
||||||
#elif defined MS_WINDOWS
|
#elif defined MS_WINDOWS
|
||||||
HANDLE file_handle;
|
|
||||||
HANDLE mmap_handle;
|
HANDLE mmap_handle;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue