mirror of
https://github.com/MariaDB/server.git
synced 2025-12-24 11:21:21 +03:00
Use MAP_ANON if MAP_ANONYMOUS is not defined, if neither of both is
defined, fall back to using malloc/free. Approved by: Marko
This commit is contained in:
14
os/os0proc.c
14
os/os0proc.c
@@ -15,6 +15,14 @@ Created 9/30/1995 Heikki Tuuri
|
||||
#include "ut0mem.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;
|
||||
/* Large page size. This may be a boot-time option on some platforms */
|
||||
ulint os_large_page_size;
|
||||
@@ -127,7 +135,7 @@ skip:
|
||||
(ulong) size, (ulong) GetLastError());
|
||||
}
|
||||
|
||||
#elif defined __NETWARE__
|
||||
#elif defined __NETWARE__ || !defined OS_MAP_ANON
|
||||
size = *n;
|
||||
ptr = ut_malloc_low(size, TRUE, FALSE);
|
||||
#else
|
||||
@@ -139,7 +147,7 @@ skip:
|
||||
/* Align block size to system page size */
|
||||
size = *n = ut_2pow_round(*n + size - 1, size);
|
||||
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)) {
|
||||
fprintf(stderr, "InnoDB: mmap(%lu bytes) failed;"
|
||||
" errno %lu\n",
|
||||
@@ -172,7 +180,7 @@ os_mem_free_large(
|
||||
" Windows error %lu\n",
|
||||
ptr, (ulong) size, (ulong) GetLastError());
|
||||
}
|
||||
#elif defined __NETWARE__
|
||||
#elif defined __NETWARE__ || !defined OS_MAP_ANON
|
||||
ut_free(ptr);
|
||||
#else
|
||||
if (munmap(ptr, size)) {
|
||||
|
||||
Reference in New Issue
Block a user