From e29bd96bed3ddce8355d4f57eb3926ce80b1eaf7 Mon Sep 17 00:00:00 2001 From: Gabriel Schulhof Date: Sat, 28 Mar 2020 11:40:57 -0700 Subject: [PATCH] restore redundancy for the sake of OSX --- src/large_pages/node_large_page.cc | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/large_pages/node_large_page.cc b/src/large_pages/node_large_page.cc index 51f419e265d780..d0200937b727e6 100644 --- a/src/large_pages/node_large_page.cc +++ b/src/large_pages/node_large_page.cc @@ -331,13 +331,16 @@ MoveTextRegionToLargePages(const text_region& r) { tmem = mmap(start, size, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED, -1 , 0); - if (tmem != MAP_FAILED) - if (madvise(tmem, size, 14 /* MADV_HUGEPAGE */) == -1) goto fail; + if (tmem == MAP_FAILED) goto fail; + if (madvise(tmem, size, 14 /* MADV_HUGEPAGE */) == -1) goto fail; + memcpy(start, nmem, size); #elif defined(__FreeBSD__) tmem = mmap(start, size, PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED | MAP_ALIGNED_SUPER, -1 , 0); + if (tmem == MAP_FAILED) goto fail; + memcpy(start, nmem, size); #elif defined(__APPLE__) // There is not enough room to reserve the mapping close // to the region address so we content to give a hint @@ -348,9 +351,12 @@ MoveTextRegionToLargePages(const text_region& r) { PROT_READ | PROT_WRITE | PROT_EXEC, MAP_PRIVATE | MAP_ANONYMOUS, VM_FLAGS_SUPERPAGE_SIZE_2MB, 0); -#endif if (tmem == MAP_FAILED) goto fail; - memcpy(start, nmem, size); + memcpy(tmem, nmem, size); + if (mprotect(start, size, PROT_READ | PROT_WRITE | PROT_EXEC) == -1) + goto fail; + memcpy(start, tmem, size); +#endif if (mprotect(start, size, PROT_READ | PROT_EXEC) == -1) goto fail; // We need not `munmap(tmem, size)` in the above `OnScopeLeave` on success.