mirror of
https://github.com/microsoft/mimalloc.git
synced 2025-05-05 15:09:31 +03:00
cleanup madv_resuable
This commit is contained in:
parent
cbc14a9287
commit
f37a3db37c
2 changed files with 13 additions and 14 deletions
|
@ -19,7 +19,7 @@ terms of the MIT license. A copy of the license can be found in the file
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
static uintptr_t mi_max_error_count = 64; // stop outputting errors after this
|
static uintptr_t mi_max_error_count = 16; // stop outputting errors after this
|
||||||
static uintptr_t mi_max_warning_count = 16; // stop outputting warnings after this
|
static uintptr_t mi_max_warning_count = 16; // stop outputting warnings after this
|
||||||
|
|
||||||
static void mi_add_stderr_output();
|
static void mi_add_stderr_output();
|
||||||
|
@ -90,7 +90,7 @@ static mi_option_desc_t options[_mi_option_last] =
|
||||||
{ 0, UNINIT, MI_OPTION(use_numa_nodes) }, // 0 = use available numa nodes, otherwise use at most N nodes.
|
{ 0, UNINIT, MI_OPTION(use_numa_nodes) }, // 0 = use available numa nodes, otherwise use at most N nodes.
|
||||||
{ 0, UNINIT, MI_OPTION(limit_os_alloc) }, // 1 = do not use OS memory for allocation (but only reserved arenas)
|
{ 0, UNINIT, MI_OPTION(limit_os_alloc) }, // 1 = do not use OS memory for allocation (but only reserved arenas)
|
||||||
{ 100, UNINIT, MI_OPTION(os_tag) }, // only apple specific for now but might serve more or less related purpose
|
{ 100, UNINIT, MI_OPTION(os_tag) }, // only apple specific for now but might serve more or less related purpose
|
||||||
{ 64, UNINIT, MI_OPTION(max_errors) }, // maximum errors that are output
|
{ 16, UNINIT, MI_OPTION(max_errors) }, // maximum errors that are output
|
||||||
{ 16, UNINIT, MI_OPTION(max_warnings) } // maximum warnings that are output
|
{ 16, UNINIT, MI_OPTION(max_warnings) } // maximum warnings that are output
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
23
src/os.c
23
src/os.c
|
@ -721,9 +721,9 @@ static bool mi_os_commitx(void* addr, size_t size, bool commit, bool conservativ
|
||||||
// for commit, just change the protection
|
// for commit, just change the protection
|
||||||
err = mprotect(start, csize, (PROT_READ | PROT_WRITE));
|
err = mprotect(start, csize, (PROT_READ | PROT_WRITE));
|
||||||
if (err != 0) { err = errno; }
|
if (err != 0) { err = errno; }
|
||||||
#if defined(MADV_FREE_REUSE)
|
#if defined(MADV_FREE_REUSE)
|
||||||
while ((err = madvise(start, csize, MADV_FREE_REUSE)) != 0 && errno == EAGAIN) {}
|
while ((err = madvise(start, csize, MADV_FREE_REUSE)) != 0 && errno == EAGAIN) { errno = 0; }
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
err = mprotect(start, csize, (commit ? (PROT_READ | PROT_WRITE) : PROT_NONE));
|
err = mprotect(start, csize, (commit ? (PROT_READ | PROT_WRITE) : PROT_NONE));
|
||||||
|
@ -786,17 +786,16 @@ static bool mi_os_resetx(void* addr, size_t size, bool reset, mi_stats_t* stats)
|
||||||
#else
|
#else
|
||||||
#if defined(MADV_FREE)
|
#if defined(MADV_FREE)
|
||||||
#if defined(MADV_FREE_REUSABLE)
|
#if defined(MADV_FREE_REUSABLE)
|
||||||
static _Atomic(uintptr_t) advice = ATOMIC_VAR_INIT(MADV_FREE_REUSABLE);
|
#define KK_MADV_FREE_INITIAL MADV_FREE_REUSABLE
|
||||||
|
#else
|
||||||
|
#define KK_MADV_FREE_INITIAL MADV_FREE
|
||||||
|
#endif
|
||||||
|
static _Atomic(uintptr_t) advice = ATOMIC_VAR_INIT(KK_MADV_FREE_INITIAL);
|
||||||
int oadvice = (int)mi_atomic_load_relaxed(&advice);
|
int oadvice = (int)mi_atomic_load_relaxed(&advice);
|
||||||
int err;
|
int err;
|
||||||
while ((err = madvise(start, csize, oadvice)) != 0 && errno == EAGAIN) {}
|
while ((err = madvise(start, csize, oadvice)) != 0 && errno == EAGAIN) { errno = 0; };
|
||||||
if (err != 0 && errno == EINVAL && advice == MADV_FREE_REUSABLE) {
|
if (err != 0 && errno == EINVAL && oadvice == KK_MADV_FREE_INITIAL) {
|
||||||
#else
|
// if MADV_FREE/MADV_FREE_REUSABLE is not supported, fall back to MADV_DONTNEED from now on
|
||||||
static _Atomic(uintptr_t) advice = ATOMIC_VAR_INIT(MADV_FREE);
|
|
||||||
int err = madvise(start, csize, (int)mi_atomic_load_relaxed(&advice));
|
|
||||||
if (err != 0 && errno == EINVAL && advice == MADV_FREE) {
|
|
||||||
#endif
|
|
||||||
// if MADV_FREE is not supported, fall back to MADV_DONTNEED from now on
|
|
||||||
mi_atomic_store_release(&advice, (uintptr_t)MADV_DONTNEED);
|
mi_atomic_store_release(&advice, (uintptr_t)MADV_DONTNEED);
|
||||||
err = madvise(start, csize, MADV_DONTNEED);
|
err = madvise(start, csize, MADV_DONTNEED);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue