Commit de61e2c1 authored by vasil's avatar vasil

Use MAP_ANON if MAP_ANONYMOUS is not defined, if neither of both is

defined, fall back to using malloc/free.

Approved by:	Marko
parent 8393a88e
...@@ -15,6 +15,14 @@ Created 9/30/1995 Heikki Tuuri ...@@ -15,6 +15,14 @@ Created 9/30/1995 Heikki Tuuri
#include "ut0mem.h" #include "ut0mem.h"
#include "ut0byte.h" #include "ut0byte.h"
/* FreeBSD for example has only MAP_ANON, Linux has MAP_ANONYMOUS and
MAP_ANON but MAP_ANON is marked as deprecated */
#if defined(MAP_ANONYMOUS)
#define OS_MAP_ANON MAP_ANONYMOUS
#elif defined(MAP_ANON)
#define OS_MAP_ANON MAP_ANON
#endif
ibool os_use_large_pages; ibool os_use_large_pages;
/* Large page size. This may be a boot-time option on some platforms */ /* Large page size. This may be a boot-time option on some platforms */
ulint os_large_page_size; ulint os_large_page_size;
...@@ -127,7 +135,7 @@ os_mem_alloc_large( ...@@ -127,7 +135,7 @@ os_mem_alloc_large(
(ulong) size, (ulong) GetLastError()); (ulong) size, (ulong) GetLastError());
} }
#elif defined __NETWARE__ #elif defined __NETWARE__ || !defined OS_MAP_ANON
size = *n; size = *n;
ptr = ut_malloc_low(size, TRUE, FALSE); ptr = ut_malloc_low(size, TRUE, FALSE);
#else #else
...@@ -139,7 +147,7 @@ os_mem_alloc_large( ...@@ -139,7 +147,7 @@ os_mem_alloc_large(
/* Align block size to system page size */ /* Align block size to system page size */
size = *n = ut_2pow_round(*n + size - 1, size); size = *n = ut_2pow_round(*n + size - 1, size);
ptr = mmap(NULL, size, PROT_READ | PROT_WRITE, ptr = mmap(NULL, size, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); MAP_PRIVATE | OS_MAP_ANON, -1, 0);
if (UNIV_UNLIKELY(ptr == (void*) -1)) { if (UNIV_UNLIKELY(ptr == (void*) -1)) {
fprintf(stderr, "InnoDB: mmap(%lu bytes) failed;" fprintf(stderr, "InnoDB: mmap(%lu bytes) failed;"
" errno %lu\n", " errno %lu\n",
...@@ -172,7 +180,7 @@ os_mem_free_large( ...@@ -172,7 +180,7 @@ os_mem_free_large(
" Windows error %lu\n", " Windows error %lu\n",
ptr, (ulong) size, (ulong) GetLastError()); ptr, (ulong) size, (ulong) GetLastError());
} }
#elif defined __NETWARE__ #elif defined __NETWARE__ || !defined OS_MAP_ANON
ut_free(ptr); ut_free(ptr);
#else #else
if (munmap(ptr, size)) { if (munmap(ptr, size)) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment