diff options
author | Nick Mathewson <nickm@torproject.org> | 2013-06-12 09:53:46 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2013-06-12 09:53:46 -0400 |
commit | 884a0e269c382f9e927d8c8b1ef4ef9d2d48379d (patch) | |
tree | c1c30f848d4a75d64faa06f8c7c1b3ef84f6c2ab | |
parent | 4835faebf533f93eb390649dfcb5c8cc0289e3d3 (diff) | |
download | tor-884a0e269c382f9e927d8c8b1ef4ef9d2d48379d.tar.gz tor-884a0e269c382f9e927d8c8b1ef4ef9d2d48379d.zip |
Use the FILE_SHARE_DELETE flag for CreateFile on a mapping
A comment by rransom on #8795 taken together with a comment by doorss
recorded on #2077 suggest that *every* attempt to replace the md cache
will fail on Vista/Win7 if we don't have the FILE_SHARE_DELETE flag
passed to CreateFile, and if we try to replace the file ourselves
before unmapping it. I'm adding the FILE_SHARE_DELETE, since that's
this simplest fix. Broken indexers (the favored #2077 hypothesis)
could still cause trouble here, but at least this patch should make us
stop stepping on our own feet.
Likely fix for #2077 and its numerous duplicates. Bugfix on
0.2.2.6-alpha, which first had a microdescriptor cache that would get
replaced before remapping it.
-rw-r--r-- | changes/bug2077_share_delete | 7 | ||||
-rw-r--r-- | src/common/compat.c | 2 |
2 files changed, 8 insertions, 1 deletions
diff --git a/changes/bug2077_share_delete b/changes/bug2077_share_delete new file mode 100644 index 0000000000..71e9160538 --- /dev/null +++ b/changes/bug2077_share_delete @@ -0,0 +1,7 @@ + o Major bugfixes (windows): + - Open files to be mapped with FILE_SHARE_DELETE so that we can + replace them before closing the mapping. This is a likely cause of + warnings and crashes when replacing the microdescriptor cache + file. Diagnosed based on comments by "doorss" and by Robert + Ransom. Possible fix for bug 2077; bugfix on 0.2.2.6-alpha. + diff --git a/src/common/compat.c b/src/common/compat.c index 59e3898deb..7f7405f6fd 100644 --- a/src/common/compat.c +++ b/src/common/compat.c @@ -238,7 +238,7 @@ tor_mmap_file(const char *filename) strlcpy(tfilename,filename,MAX_PATH); #endif file_handle = CreateFile(tfilename, - GENERIC_READ, FILE_SHARE_READ, + GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_DELETE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, |