mmap.diff
text/x-diff
Filename: mmap.diff
Type: text/x-diff
Part: 0
Patch
Format: unified
| File | + | − |
|---|---|---|
| src/backend/storage/ipc/dsm_impl.c | 0 | 0 |
| src/include/portability/mem.h | 0 | 0 |
diff --git a/src/backend/storage/ipc/dsm_impl.c b/src/backend/storage/ipc/dsm_impl.c
new file mode 100644
index cf7938c..0859fbf
*** a/src/backend/storage/ipc/dsm_impl.c
--- b/src/backend/storage/ipc/dsm_impl.c
*************** dsm_impl_posix(dsm_op op, dsm_handle han
*** 368,374 ****
/* Map it. */
address = mmap(NULL, request_size, PROT_READ | PROT_WRITE,
! MAP_SHARED | MAP_HASSEMAPHORE, fd, 0);
if (address == MAP_FAILED)
{
int save_errno;
--- 368,374 ----
/* Map it. */
address = mmap(NULL, request_size, PROT_READ | PROT_WRITE,
! MAP_SHARED | MAP_HASSEMAPHORE | MAP_NOSYNC, fd, 0);
if (address == MAP_FAILED)
{
int save_errno;
*************** dsm_impl_mmap(dsm_op op, dsm_handle hand
*** 960,966 ****
/* Map it. */
address = mmap(NULL, request_size, PROT_READ | PROT_WRITE,
! MAP_SHARED | MAP_HASSEMAPHORE, fd, 0);
if (address == MAP_FAILED)
{
int save_errno;
--- 960,966 ----
/* Map it. */
address = mmap(NULL, request_size, PROT_READ | PROT_WRITE,
! MAP_SHARED | MAP_HASSEMAPHORE | MAP_NOSYNC, fd, 0);
if (address == MAP_FAILED)
{
int save_errno;
diff --git a/src/include/portability/mem.h b/src/include/portability/mem.h
new file mode 100644
index 7c77dbd..a4b01fe
*** a/src/include/portability/mem.h
--- b/src/include/portability/mem.h
***************
*** 30,35 ****
--- 30,43 ----
#define MAP_HASSEMAPHORE 0
#endif
+ /*
+ * BSD-derived systems use the MAP_NOSYNC flag to prevent dirty mmap(2)
+ * pages from being gratuitously flushed to disk.
+ */
+ #ifndef MAP_NOSYNC
+ #define MAP_NOSYNC 0
+ #endif
+
#define PG_MMAP_FLAGS (MAP_SHARED|MAP_ANONYMOUS|MAP_HASSEMAPHORE)
/* Some really old systems don't define MAP_FAILED. */