1#ifndef INTERNAL_VM_MAP_H
2#define INTERNAL_VM_MAP_H
11#include "ruby/internal/config.h"
23#ifdef NEED_MADVICE_PROTOTYPE_USING_CADDR_T
25extern int madvise(caddr_t,
size_t,
int);
30rb_vm_map_reusable_lazy(
void *addr,
size_t len,
int advice)
34#elif defined(VM_CHECK_MODE) && VM_CHECK_MODE > 0 && defined(MADV_DONTNEED)
35 if (!advice) advice = MADV_DONTNEED;
36 madvise(addr,
len, advice);
37#elif defined(MADV_FREE_REUSABLE)
40 if (!advice) advice = MADV_FREE_REUSABLE;
41 while (madvise(addr,
len, advice) == -1 &&
errno == EAGAIN);
42#elif defined(MADV_FREE)
44 if (!advice) advice = MADV_FREE;
45 madvise(addr,
len, advice);
46#elif defined(MADV_DONTNEED)
48 if (!advice) advice = MADV_DONTNEED;
49 madvise(addr,
len, advice);
50#elif defined(POSIX_MADV_DONTNEED)
52 if (!advice) advice = POSIX_MADV_DONTNEED;
53 posix_madvise(addr,
len, advice);
55 VirtualAlloc(addr,
len, MEM_RESET, PAGE_READWRITE);
61rb_vm_map_reusable_immediate(
void *addr,
size_t len,
int advice)
65#elif defined(MADV_FREE_REUSABLE)
68 if (!advice) advice = MADV_FREE_REUSABLE;
69 while (madvise(addr,
len, advice) == -1 &&
errno == EAGAIN);
70#elif defined(MADV_DONTNEED)
73 if (!advice) advice = MADV_DONTNEED;
74 madvise(addr,
len, advice);
75#elif defined(POSIX_MADV_DONTNEED)
76 if (!advice) advice = POSIX_MADV_DONTNEED;
77 posix_madvise(addr,
len, advice);
80 VirtualAlloc(addr,
len, MEM_RESET, PAGE_READWRITE);
86rb_vm_map_reuse(
void *addr,
size_t len)
88#if defined(MADV_FREE_REUSE)
90 while (madvise(addr,
len, MADV_FREE_REUSE) == -1 &&
errno == EAGAIN);
int len
Length of the buffer.
#define errno
Ractor-aware version of errno.