Skip to content

Commit b4023a7

Browse files
committed
io: use copy-on-write mappings
1 parent 26e212e commit b4023a7

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

thtk/io.c

+3-3
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ thtk_io_file_map(
322322
thtk_error_new(error, "mmap failed: %s", strerror(errno));
323323
return NULL;
324324
}
325-
if (mmap(map+pagesize, vcount, PROT_READ, MAP_PRIVATE|MAP_FIXED, fileno_unlocked(private->stream), voffset) == MAP_FAILED) {
325+
if (mmap(map+pagesize, vcount, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, fileno_unlocked(private->stream), voffset) == MAP_FAILED) {
326326
munmap(map, pagesize+vcount);
327327
thtk_error_new(error, "mmap failed: %s", strerror(errno));
328328
return NULL;
@@ -363,7 +363,7 @@ thtk_io_file_map(
363363
li.QuadPart += vcount;
364364
HANDLE map = CreateFileMappingW(
365365
(HANDLE)_get_osfhandle(fileno_unlocked(private->stream)),
366-
NULL, PAGE_READONLY, li.HighPart, li.LowPart, NULL);
366+
NULL, PAGE_WRITECOPY, li.HighPart, li.LowPart, NULL);
367367
if (!map) {
368368
char *buf;
369369
FormatMessageA(
@@ -374,7 +374,7 @@ thtk_io_file_map(
374374
return NULL;
375375
}
376376
li.QuadPart = voffset;
377-
unsigned char *view = MapViewOfFile(map, FILE_MAP_READ, li.HighPart, li.LowPart, vcount);
377+
unsigned char *view = MapViewOfFile(map, FILE_MAP_COPY, li.HighPart, li.LowPart, vcount);
378378
if (!view) {
379379
char *buf;
380380
FormatMessageA(

0 commit comments

Comments
 (0)